古いファイルをクリーンアップするためにfindを使用していますが、ファイルが多すぎます。実行には数分/時間がかかり、他のサーバープロセスではIOパフォーマンスの問題が発生します。
find -mtime +100 -delete -print
ioniceを使ってみましたが役に立たないようです。
ionice -c 3
1. 照会の作業を高速化し、2. 他のプロセスに影響を与えないようにするにはどうすればよいですか。 FSはext4ですが、このような作業にはext4が適していませんか?カーネルは3.16で、ストレージはRAID 1の2x 1TB 7200rpm HDDです。これで、610228個のファイルに93GBがあるため、平均152KB/ファイルです。
たぶん、1つのディレクトリにあまりにも多くのファイルを保存しないでください。
ベストアンサー1
公開などのコマンドを実行すると、見つかったすべてのファイルに対して操作が実行されfind
ます。rm
パフォーマンスの面では、これは良いアプローチではありません。
これを改善するには、-exec
findのオプションを使用してコマンドの出力を処理できますrm
。
find -mtime +100 -exec rm {} +
+
代替ではなくシャットダウンを使用することが重要です\;
。を使用すると、+
findはrm
単純実行時に処理できるファイルの最大数に対してのみコマンドを実行します。終了後、各ファイルに対して 1 つのコマンドが\;
実行されるため、同じ問題が発生します。find
rm
ionice
より良いパフォーマンスを得るために言及したコマンドにそれを追加できます。システムのパフォーマンスが向上することを感じない場合は、CPUなどのI / Oよりも他のリソースを消費する可能性が高くなります。これを行うには、renice
コマンドを使用してプロセスのCPU使用率の優先順位を下げることができます。
私は以下を使用します:
ionice -c 3 find -mtime +100 -exec rm {} +
別のシェルでfindコマンドのPIDを見つける必要があります。ps -ef | grep find
最後に renice コマンドを実行します。renice +19 -p <PID_find_command>