古いファイルを削除すると速度が遅くなり、IOパフォーマンスが「キャンセル」されます。

古いファイルを削除すると速度が遅くなり、IOパフォーマンスが「キャンセル」されます。

古いファイルをクリーンアップするために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パフォーマンスの面では、これは良いアプローチではありません。

これを改善するには、-execfindのオプションを使用してコマンドの出力を処理できますrm

find -mtime +100 -exec rm {} +

+代替ではなくシャットダウンを使用することが重要です\;。を使用すると、+findはrm単純実行時に処理できるファイルの最大数に対してのみコマンドを実行します。終了後、各ファイルに対して 1 つのコマンドが\;実行されるため、同じ問題が発生します。findrm

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>

おすすめ記事