私は自分のサイトにslicehost.com256MBホスティングを使用しています。
残念ながら、ほとんど常に交換しています。コンソールにfree
と入力すると、次のようになります。
total used free shared buffers cached
Mem: 251140 228968 22172 0 596 17356
-/+ buffers/cache: 211016 40124
Swap: 524284 60944 463340
サーバーをreboot
すると、スワッピングは少し停止してから再開します。
どうやって:
1)どのプロセス/機能がスワッピングを引き起こすかを把握する
2)問題を解決する方法
3)256MBが少なすぎるかどうか、および最適化ではなくアップグレードの時間を把握する
ありがとう
// CakePHP/Apacheを使用
1)ps aux
を試して、/proc/$pid/status
と/proc/$pid/smaps
を確認します。
2)メモリを追加します。
3)現在の負荷を考えると、256MBは明らかに少なすぎます。
誰が戦っているのかを診断するために、 atop をインストールすることをお勧めします。上部には、プロセスレベルの変更が表示されます。簡単なデモンストレーションのために、MySQLが利用可能なすべてのメモリを使用するように準備し、次にいくつかの大きなファイルを操作して、大きなテストファイルをキャッシュするためにMySQLメモリを強制的にスワップアウトしました。以下は、MySQLがスワップからメモリを読み戻そうとしていることを示すスクリーンショットです(ハイライトを確認できるように、テキストではなく画像)。
MySQLがスワップアウトされたものに到達しようとすると、majfltとminfltの番号に注意してください。他のメモリ統計や、top、psなどから取得したいものはすべて表示できます。{apt-get、yum} install atop。
Apacheを使用していますか?
その場合は、次のようにしてください。
プロセスごとに20Mbを消費しているとしましょう。
次に、簡単な計算を行います。 SO用に156Mbを確保し、残りの100を1つのApacheが消費しているメモリの量で除算します:100/20 = 5
これにより、同時に実行できるApacheプロセスの数がわかります。
次に、Apache構成(/ etc/Apache2)に移動し、メイン構成ファイル内で次の設定を見つけます。-StartServers-ServerLimit-MaxClients
そして、それらすべてを5に設定します。
256はApacheのセットアップには小さすぎることに注意してください。 2Gb未満のメモリでApacheを実行することはありません。
スワップピネスを下げることができます。最初にcat/proc/sys/vm/swappininessで現在の値を確認してから、値を変更しますsysctl -w vm.swappiness = 1
また、Sudo swapoff aまたは/ etc/fstabを編集して、いつでもスワップを無効にすることができます。
最近では、あなたのような小さなVMでも、スワップを使用することはめったにありません。
Apacheのメモリ使用量を減らすことはできますが、それは簡単ではありません。
MaxClients 64
)および適度な数のスレッド(たとえば、ThreadsPerChild 32
)。それはPHPです。
メモリを追加するか、同時PHPプロセスの数を減らします
それほど多くはありません。
大量のスワッピングが発生したときに、発行してどのプロセスがどのくらいのメモリを消費しているかを調べてみませんか。
上
どのプロセスが健全なメモリを消費しているかを見つけたら、問題を修正する方法についての最初のステップになるはずです。例えば。 mysqlクエリが大量のメモリを使用している場合は、mysqlサーバーのメモリを制限するか、クエリの最適化を行う可能性があります。
256MBは本当に小さいようです。あなたがApacheについて言及し、Apacheにはデフォルトでプリフォークモードの操作が付属していることを知っているので、それが本当の原因である可能性があります。必要なモジュールのみを起動して(通常、Apacheには多数のモジュールが自動的に起動する)ワーカーモードでApacheを実行するか、Apache全体を軽量のNginxに置き換えることを検討してください。