大量のファイルをI/Oに注意しながらゆっくり削除

linux

大量のファイルを単純にrmなどで削除するとディスクのI/Oがめっちゃあがってiowaitが発生し、思わぬ障害に繋がることがある。そのため、大量に削除する際は、その辺を意識したコマンドを実行する必要性がある。

ファイルを削除したい状況説明

apacheのmod_cacheを利用しているサーバのキャッシュ削除を放置せずにいたら、ファイルがめちゃめちゃ溜まっていってDISKの空き容量が危険領域になった。Apache2.2の記事参考だけど、「Apacheの mod_disk_cache は、基本的にキャッシュを削除しません。 有効期限が切れても削除しません。次にキャッシュされるときに上書きするだけです。」にしたら増えすぎじゃないか説。グラフはこんな感じで綺麗に右肩上がり。上書きされるなら、上昇は最初だけでそれ以降は停滞すると思っていたがアテがはずれてしまった。

実行コマンド内容

  • 前提
    • I/O負荷を下げて実行
    • 残すキャッシュファイルは1日前まで
  • 実行コマンド例
    • findとmtimeオプションで対象のファイルを検索し、deleteオプションで削除
    • sleepを入れることで1ファイル0.05秒間隔で実行
$ find /var/cache/apache/* -type f -mtime +1 -delete -exec sleep 0.05 \;
  • 補足
    • 実行する秒間は、I/O負荷を確認しながら徐々に早くしていくのが望ましい

その他補足

nice

「nice」コマンドで優先度を下げる形で上記を実行したが、I/O負荷はnice無し自となんら変わらず高い状態だったのであまり意味がなかった。

htcacheclean

試してないけど、このコマンドでも良い感じで削除ができるみたい。参考文献は下記。

Apacheのキャッシュを削除するhtcachecleanを使ってみる | レンタルサーバー・自宅サーバー設定・構築のヒント

ただ、結局時間はかかるっぽい

htcacheclean 実行例(大量にある場合) at softelメモ
問題 htcacheclean したらすごい時間かかってるんですけど。 長らく削除をしていなくて、大量にキャッシュファイルができているからでしょうか… 答え ある長期間削除を実行していなかった環境での実行例。 とりあえず ...

コメント