2

サーバーの 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% /

それでも、セッション フォルダーを一覧表示すると、古いセッション ディレクトリのフォルダー サイズに違いはありません。フォルダのサイズが最大値までしか拡大されないかのようです。

状況は解決したように見えるので、答えはそれほど重要ではありませんが、好奇心から、フォルダーサイズがどのように計算され、なぜ減少しないのかを知りたいと思います.

4

1 に答える 1

0

「rm-rfdirName」を使用してそのディレクトリ内のすべてのファイルを削除することもできますが、それはすでに気付いたパフォーマンスへの影響があります。

したがって、ディレクトリが空になったら、それを削除するだけです。使用したスペースが回復します。

ディレクトリは単なる特殊ファイルであることを理解する必要があります。ファイルを追加すると大きくなり、一部のファイルを削除すると、そのスポットは空としてマークされ、空のスポットがなくなるまで、新しく追加したファイルが使用されます。ですから、今あなたがしているのは、それらの何百万ものスポットすべてを「空」としてマークすることだけです。ディレクトリを削除するまで、これらは削除されません。ディレクトリが空になると、パフォーマンスへの影響はほとんどありません。大きなファイルを1つ削除するよりも影響はありません。

于 2013-03-14T20:37:14.813 に答える