8

プログラムで検出する方法はありますか?

また、どのプロセスがスラッシングしているかを検出するための Linux コマンドは何でしょうか?

4

1 に答える 1

12

ここでの「スラッシング」とは、すべてのプロセスのアクティブなメモリ セットが大きすぎてメモリに収まらない状況を指すと想定しています。このような状況では、すべてのコンテキスト スイッチがディスクへの読み取りと書き込みを引き起こし、最終的にはサーバーの負荷が非常に高くなり、ハードウェアの再起動がボックスの制御を取り戻す唯一のオプションになる可能性があります。

/proc/vmstat にはグローバル カウンタ swin と swout があります。これらの両方が短い時間間隔で増加する場合は、ボックスでスラッシングの問題が発生している可能性があります。

プロセスレベルでは、それは自明ではありません。/proc/$pid/status にはいくつかの便利なものが含まれていますが、swin と swout は含まれていません。2.6.34 から、VmSwap エントリ、使用されるスワップの合計量があり、/proc/$pid/state の変数 #12 はメジャー ページ フォールトの数です。/proc/$pid/oom_score も調べる価値があります。VmSwap が増加している場合、および/または主要なページ フォールトの数が増加している場合、および/または oom_score が非常に高い場合、プロセスがスラッシングを引き起こす可能性があります。

スクリプト thrash-protect を作成しました - https://github.com/tobixen/thrash-protectで入手できます- これは、どのプロセスがスラッシングを引き起こしているのかを突き止め、プロセスを一時的に停止させようとします。それは私にとってうまくいき、最終的にいくつかのサーバーの再起動から私を救ってくれました.

更新: カーネルの新しいバージョンには、/proc/pressure の下に有用な統計があります。また、スワップなしでセットアップされたコンピュータも、メモリがいっぱいになると「スラッシング」を開始します。これは、バッファ スペースが不足すると、ディスク上で過剰な読み取り操作が発生する傾向があるためです。

于 2014-01-16T15:57:49.270 に答える