私たちの一般的な使命は、いくつかdu
のサブディレクトリを要約し、最悪の違反者を特定し、その結果を使用して急速に増加するコンテンツを見つけ、潜在的な問題を見つけることです。これをdiff
比較するためにスナップショットを使用します。
それぞれが数十または数千のファイル(またはそれ以上)を含むことができる複数(数百)のサブディレクトリを持つ最上位ディレクトリを持ちます。
この場合、 " du -s
"は非常に深刻なIO攻撃を引き起こす可能性があり、これはサーバーがキャッシュを放棄し、それによって膨大なIOスパイクを引き起こします。これは非常に穏やかな副作用です。
不要な副作用なしに同じデータを取得するためにどの戦略を使用できますか?
答え1
見てくださいionice
。 ~からman ionice
:
このプログラムは、プログラムのioスケジューリングカテゴリと優先順位を設定または取得します。引数が指定されていない場合、または-pのみが指定されている場合、ioniceは現在のioスケジューリングクラスとプロセスの優先順位を照会します。
「アイドル」入出力クラス(使用可能な最低優先順位)を使用して実行するには、du
次のようにします。
ionice -c 3 du -s
du
これにより、I / Oが他のプロセスを妨げないようにすることができます。次のようにプログラムを再調整して CPU 優先順位を下げることも検討できます。
renice -n 19 "$duPid"
初期化中に両方を実行することもできます。
nice -n 19 ionice -c 3 du
答え2
多くのファイルシステムが単一のディレクトリ内の大きなファイルツリーを正しく処理できないため、単一のディレクトリに多数のファイルがあると、I / Oスパイクが発生する可能性があります。より多くのサブディレクトリに分割すると役に立ちます。単一のディレクトリに 10,000 個を超えるファイルがあり、問題が発生した場合は、それらを分割する必要があります。
ディスク使用量のトレースについては、まず見て、df
そこで使用量の値が急速に上昇しない場合、サブディレクトリも急速に上昇しない場合は完全にスキップdu
できます。
別のオプションは、ファイルシステムがサポートしている場合に使用量を追跡するディスククォータシステムです。
答え3
または、ionice
ディスクアクセスをより効率的にすることもできます。これは実行して試すことができます。
find /du/root -printf ""
find /du/root -perm 777 -printf ""
最初(おそらく経由ionice
)。ファイルが多すぎると機能しません。多すぎる量は、使用可能なRAMの量によって異なります。