私はLinux 2.6.36カーネルを使用していますが、いくつかのランダムなエラーが発生しています。私のシステムは一貫して 'ls'コマンドを実行できません。 :(VFS:最大ファイル数が1231582に達しました
私は自分のdmesgの出力には、いくつかのエラーを注意してください。
# dmesg | tail
[2808967.543203] EXT4-fs (sda3): re-mounted. Opts: (null)
[2837776.220605] xv[14450] general protection ip:7f20c20c6ac6 sp:7fff3641b368 error:0 in libpng14.so.14.4.0[7f20c20a9000+29000]
[4931344.685302] EXT4-fs (md16): re-mounted. Opts: (null)
[4982666.631444] VFS: file-max limit 1231582 reached
[4982666.764240] VFS: file-max limit 1231582 reached
[4982767.360574] VFS: file-max limit 1231582 reached
[4982901.904628] VFS: file-max limit 1231582 reached
[4982964.930556] VFS: file-max limit 1231582 reached
[4982966.352170] VFS: file-max limit 1231582 reached
[4982966.649195] top[31095]: segfault at 14 ip 00007fd6ace42700 sp 00007fff20746530 error 6 in libproc-3.2.8.so[7fd6ace3b000+e000]
もちろん、ファイル-maxのエラーが一緒にクラスタ化し、最近され、不審に見えるにも少し見えます
# cat /proc/sys/fs/file-max
1231582
# cat /proc/sys/fs/file-nr
1231712 0 1231582
を。私にとって奇妙なことですが、このシステムでは120万のファイルが開かれているわけではありません。私はそれを使用する唯一のもので、ローカルネットワーク外の誰にも見えません。
# lsof | wc
16046 148253 1882901
# ps -ef | wc
574 6104 44260
私はいくつかのドキュメントを見たと言って:
ファイル-MAX &ファイル-NR:
をカーネルにはまだそれが再び彼らを解放しません動的に処理しますが、ファイルを割り当てます。
file-maxの値は、Linuxカーネルが割り当てるファイルハンドルの最大数を示します。ファイルハンドルが不足していることに関する多くのエラーメッセージが表示されたら、この制限を増やすことをお勧めします。
従来、file-nrの3つの値は、割り当てられたファイルハンドルの数、割り当てられているが使用されていないファイルハンドルの数、およびファイルハンドルの最大数を示していました。 Linux 2.6では、空きファイルハンドルの数として常に0が報告されます。これはエラーではなく、割り当てられたファイルハンドルの数が使用されるファイルハンドルの数と正確に一致することを意味します。
printkでfile-maxよりも多くのファイル記述子を割り当てようとすると、 "VFS:file-max limit reached"が検索されます。
私が最初に読んだのは、カーネルには基本的にファイル記述子のリークが内蔵されていることです。しかし、私はそれを信じるのが非常に難しいと感じています。それは、ファイルディスクリプタを解放するために、頻繁に使用されるすべてのシステムを再起動する必要があることを意味します。私が言ったように、これは本当であるとは信じられません。なぜなら、Linuxシステムを数カ月(何年も)も一度に稼働させることが普通であるからです。一方、私のアイドル状態のシステムでは、100万を超えるファイルが開かれているとも信じられません。
修正や追加の診断のためのアイデアはありますか?もちろん、システムを再起動するだけでも可能ですが、数週間おきにこれが繰り返し発生することは望ましくありません。私はFirefoxを終了しましたが、これはFirefoxを終了しました。これは、1つのウィンドウしか開いていなくても、ほぼ2000行のlsof出力(!)を占めていましたが、今度は 'ls'をもう一度実行できます。長い間問題。 (編集:あまりにも早く話しましたが、この質問の入力が終わるまでに症状は戻っていました)
ご協力いただきありがとうございます。
サーバーフォールト – rene
の方がいいですよ、私はそのことについては知らなかった。ポインタのおかげで、代わりに投稿します。 –
そのドキュメントは正確ではないようです。[linux/fs/file_table.c](http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob; f = fs/file_table.c; hb = HEAD)は、両方ともファイルハンドルを割り当てて解放します。 どこかで漏れがあるように聞こえますが、それをどのように追跡するのかが分かりません。 – ephemient