開いているファイルが多すぎる-犯人を見つける方法


69

を実行するtail -f filenameと、次のメッセージが表示されました。

tail: inotify cannot be used, reverting to polling: Too many open files

それは潜在的な問題ですか?

開いているすべてのファイルの原因を診断するにはどうすればよいですか?疑わしいプロセスのリストがありますが、それらが犯人であることがわからない場合は、確認するプロセスを知ることに依存しない指示が役立ちます。


1
で利用可能なファイル記述子の数を増やしましたulimitか?
イグナシオバスケス-アブラムス

2
@ IgnacioVazquez-Abramsこれは他のユーザーにとっては役立つかもしれませんが、私にとっては病気ではなく症状を治療したい気がします。
アンドリューグリム

間違いではありませんが、多くのファイルを開く正当な理由がアプリにある場合があります。
イグナシオバスケス-エイブラムス

回答:


72

lsofを使用して、誰が非常に多くのファイルを開いているかを理解できます。通常、非常に多くのファイルを開く(Web)サーバーですが、lsofは原因の特定に役立ちます。

誰が悪い男かを理解したら

lsofからの出力が非常に大きい場合は、ファイルにリダイレクトしてからファイルを開いてみてください

例(最初のコマンドCtrl+ が必要な場合がありますC

lsof > ~/Desktop/lsof.log
cat ~/Desktop/lsof.log | awk '{ print $2 " " $1; }' | sort -rn | uniq -c | sort -rn | head -20
vim ~/Desktop/lsof.log

37
lsof | awk '{ print $2; }' | uniq -c | sort -rn | head
怠zy

1
同じエラーが発生し、ulimitを使用しても機能しません。tail -Fコマンドは引き続きエラーを返します。制限を1024から3000に増やしたので、それまでに十分なスペースがあると想像できます...再起動する必要があると思います!
アレクシスウィルケ

15
itsadokの行は有用であることがわかりましたが、最初にソートし(uniq隣接する行でのみ機能するため)、uniqを実行してから再度ソートする必要があると思います。だからlsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head
タイラーコリアー

19
開いているほとんどのファイルをソートしてカウントアップすることは、間違いなく最善のことです。プロセス名とpidを表示: '' 'lsof | awk '{print $ 2 "" $ 1; } '| ソート-rn | uniq -c | ソート-rn | head -20 '' '
gaoithe 14

2
@gaoitheあなたが答えにそれを入れれば私は喜んでそれを賛成します:)
マットボール

23

他の誰かがそれを必要とする場合に...

ulimit -a

現在の制限をすべて表示します。具体的にulimit -n 70000は、ファイル記述子の制限を設定します。

また...

cat /proc/sys/fs/file-max

編集すると、カーネル制限を表示/設定します。

sudo echo 200000 > /proc/sys/fs/file-max

より詳細な説明は...で見つけることができます

非rootユーザーのオープンファイル制限を増やすにはどうすればよいですか?


3
ulimitsがあるため、システムでのリソースの使用を厳密に制御できます。多くのファイル記述子を使用する必要があることがわかっているプロセスでは、それらを個別に増やすのが最善です。テストでそれらを厳しく保つことにより、時間の経過とともにファイル記述子が確実にリークする可能性のあるプロセスが見つかります。また、unix / linuxのデバイスアクセスにはファイルハンドルが使用されることに注意してください。たとえば、プロセスによって開かれたすべてのネットワークソケットはファイルハンドルを使用します。これが、通常のファイルシステムファイルだけでなく、ネットワーク接続などのデバイスファイルの場合に、「開いているファイルが多すぎる」ことがある理由を説明しています。
gaoithe 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.