サーバーの 1 つに、明らかにバグのあるセッション ガベージ コレクション ルーチンがありました。その結果、セッション ディレクトリには数百万のファイルが含まれます。これらの削除には数週間かかりますが、セッション フォルダーはファイルが削除されるよりも速く成長しているようです。
50000 個のバッチでファイルを削除していますが、これはかなり効率的で、約 5 分かかります。
ls -U -1 | ヘッド -n 50000 | xargs rm -f
それでも、ディレクトリ リスト (ls -l) を実行すると、セッション ディレクトリが常に拡大しているように見えます。
drwx-wx-wt 2 ルート ルート 843493376 3 月 6 日 15:36 セッション
drwx-wx-wt 2 root root 843530240 3 月 6 日 15:41 セッション
したがって、私の質問は次のとおりです。ディレクトリは実際に成長していますか (同じ期間中にディレクトリから 50000 個のファイルを削除したにもかかわらず)、または ls コマンドが別のソースからデータを出力していますか?
アップデート
コメントでも示唆されているように、手に負えなくなっていたセッション ディレクトリを移動しました。新しい空のセッション ディレクトリとセッション クリーンアップ スクリプトへのいくつかの変更により、これは問題なく動作しているように見えます。
古いセッション ディレクトリを削除するのはまだ少し手間がかかります。ディレクトリ内にいくつのファイルがあるかわからないため、いつ空になるかを判断するのは困難です。
ファイルの大量のバッチを削除するとサーバーのパフォーマンスが低下することに気付いたので、バッチ サイズを縮小し、そのための小さなスクリプトを作成しました。
#!/bin/bash
cleanSession(){
nice -n 19 ls /var/lib/php/session_old -U -1 | head -n 1000 | xargs -I '{}' rm -f /var/lib/php/session_old/'{}'
sleep 1
cleanSession
}
cleanSession
これを実行すると、ディレクトリが 1000 個のファイル バッチで空になります。「df .」を使用すると、ゆっくりと動作しているように見えます。
ファイルシステム 1,000 ブロック使用済み 使用可能使用率 % マウント済み
/dev/sda3 236764896 47035860 177702004 21% /
...
/dev/sda3 236764896 47019528 177718336 21% /
それでも、セッション フォルダーを一覧表示すると、古いセッション ディレクトリのフォルダー サイズに違いはありません。フォルダのサイズが最大値までしか拡大されないかのようです。
状況は解決したように見えるので、答えはそれほど重要ではありませんが、好奇心から、フォルダーサイズがどのように計算され、なぜ減少しないのかを知りたいと思います.