カーネル2.6を使用するSqueezeで奇妙なメモリ管理動作が発生します。私はこれを理解するためにnmonを使用しようとしています。
場合によっては、システムは30秒から5分間停止します。
サーバーには4GBのRAMがあります。
nmonのデータは次のとおりです。
- +1.6GB RAMは無料です。
- キャッシュが約350MB減少しました。
- swapcachedが約80MB減少しました。
- スワップスペースが〜200M増加しました。
- アクティブメモリが約1.3GB削減
これが発生すると、サーバーはいかなる制限にもアクセスしません。これが発生した直後に、アクティブメモリは徐々に回復し、キャッシュとmemfreeは自然にダウンします。
これは暴走過程のようには見えません。 OSが突然多くのメモリを再割り当てし、ゆっくり再割り当てするようです。交換性はほとんど影響を受けないので、要因にしてはいけません。
何が起こっているのかを追跡する方法はありますか?なぜこの空きメモリは数秒以内に突然現れ、30分以内にキャッシュに戻りますか?
答え1
システムログは何を言いますか? OOMが原因でカーネルがプロセスを終了しているという指示はありますか?
スワップの規模はどのくらいですか?vm.
名前空間のカーネルを調整しましたか?
「ダミー」のコストはいくらですか?
この30分間何が起こりますか?それはどのようにvmstat -SM 3
見えますか?
おそらく最も重要なことは:どのアプリケーションを実行しているのか、それがそのアプリケーションが(どのように)影響を受けるのかということです。
答え2
わかりましたらDoSでした。約60個のphp5-cgiプロセスが発生して30秒以内に終了し、1.6GBのRAMを吸い込んで終了しました。
1.6GBを占める1つのプロセスではなく60のプロセスを占めるため、私のログには表示されません。オームキラーがそれを殺すのではなく、Apacheの何かがそれを殺しているのです。
プロセスの幅を把握するためにプロセスのロギングを調整し、メモリを追加するためにいくつかのawkスクリプトを書いたとき、ついにそれを見つけました。今は明らかなようです。