
トラフィックの多いWebサーバーに深刻な問題があります。 PHPページの速度が著しく遅くなり、これはデータベース内のテーブルを参照するページまたはアクセスセッションでのみ発生する問題のようです。 「/var/log/messages」ログファイルには、次のエラーが数十万個表示されます。 "Kernel: EXT4-fs warning (device dm-0): ext4_dx_add_entry: ディレクトリインデックスがいっぱいです!"
Filezillaでフォルダを開くことができず、grepを使用してファイル/サブディレクトリの数を計算できないため、 '/var/lib/php/sessions'にボトルネックがあるようです。これはハードドライブの破損の可能性が高いですが、まずそのディレクトリ内のファイル数を確認して直感を確認したかったのです。
フォルダ内のファイル数を実際に数えることなく、フォルダ内のファイル数をどのように知ることができますか?
答え1
ディレクトリのサイズ(図を参照ls -ld /var/lib/php/sessions
)で確認できます。ファイルが小さい場合、ファイルはあまりありません。大きい場合はアイテムが多いかもしれませんし、過去にアイテムが多かったかもしれません。
ファイルを個別にリストしない限りstat
、コンテンツのリストは同じサイズのファイルを読み取るよりも時間がかかりません。
ls
おそらく何が起こっているのかdosまたはエイリアスがls -F
あるということですls --color
。これらのオプションを使用すると、lstat
各ファイルに対してシステムコールが発生し、そのファイルがファイルかディレクトリであるかを確認します。
また、ドットファイルをリストし、ファイルリストをソートされていないままにする必要があります。これを行うには、次を実行します。
command ls -f /var/lib/php/sessions | wc -l
改行文字を含むファイル名が多すぎない場合は、良い見積もりを得ることができます。
$ ls -lhd 1
drwxr-xr-x 2 chazelas chazelas 69M Aug 15 20:02 1/
$ time ls -f 1 | wc -l
3218992
ls -f 1 0.68s user 1.20s system 99% cpu 1.881 total
wc -l 0.00s user 0.18s system 9% cpu 1.880 total
$ time ls -F 1 | wc -l
<still running...>
の出力に使用されているinodeの数から、ファイルシステムの他の場所にある固有のファイルの数を減算して、そのファイルの数を推測することもできますdf -i
。
たとえば、ファイルシステムが/var
GNUにマウントされている場合find
:
find /var -xdev -path /var/lib/php/sessions -prune -o \
-printf '%i\n' | sort -u | wc -l
/var/lib/php/sessionsにないファイルの数を見つけます。IUsed
出力のフィールドからそれを引くと、他の場所ではdf -i /var
接続されていません(一部の特別なinodeは通常のextファイルシステムのどのディレクトリにも接続されていないため)、リンクファイルの数のおおよその値を得ることができます/var/lib/php/sessions
(注/ var / lib / php / sessionsには、同じファイルに対して10億のエントリが含まれる可能性が高くなります(実際には、ファイル内の最大リンク数はほとんどのファイルシステムよりはるかに低いです)。
ディレクトリの内容を読み取る速度が比較的速くなければならない場合は、ファイルの削除が非常に遅くなる可能性があります。
rm -r
、ファイルを削除するときは、まずディレクトリの内容を一覧表示し、各ファイルをunlink()
呼び出します。各ファイルに対して、システムはこの巨大なディレクトリでファイルを見つける必要がありますが、ハッシュしないと非常に費用がかかります。
答え2
ls -1 /var/lib/php/sessions | wc -l
次のようにSSHを使用できると思います。
参考までls -(one)
にws -(letter l)
答え3
ext2/3/4では、ディレクトリ自体のサイズに基づいていくつかの近似を作成できます。これは非常に正確ではありませんが、「計算」せずに教育的な推測を可能にします。
デフォルトでは、ディレクトリは4096バイトで始まります。アイテムが増えるとサイズが大きくなります(ただし、再び縮小しません)。いくつかのテストの後、各項目は12バイトを占め、制限に達すると4096バイトずつ増加することを発見しました。これは、現在のディレクトリサイズが16384の場合、一度に1,024〜1,365の項目があることを意味します。
このディレクトリのファイルをすぐに見る方法もあります。を実行すると、ls
ディレクトリ全体を読み、ソートします。無効なソートを使用できますls -1U
。