web-dev-qa-db-ja.com

tail:inotifyは使用できず、ポーリングに戻ります:開いているファイルが多すぎます

tail -f catalina.outを実行しようとすると、次のエラーが表示されます。

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

私はこの投稿で答えを試しました: 開いているファイルが多すぎる-犯人を見つける方法

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

上記のコマンドを実行すると、出力は

17 6115

13 6413

10 6417

10 6415

9 6418

9 6416

9 6414

8 6419

4 9 

4 8

1024個のファイルを開いているプロセスはありません。開いているファイルの数は17,13,10,10,9ではありませんか?または私はそれを間違って理解していますか?そして、これらはすべてbash、sshd、Apache2、Tomcatは4番でした。

lsof | grep tail | wc -lを返した20も行いました。これらの数値はそれほど大きくないのに、なぜtail -f catalina.outが失敗するのですか?

14
gbag

これは http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html の指示に従うことで解決しました

永続的なソリューション(再起動後も保持される)行の追加:

fs.inotify.max_user_watches=1048576

に:

/etc/sysctl.conf

制限値を恒久的に修正しました(再起動間でも)。

それから

sysctl -p
14
Elan Hasson

その答え は完全ではないと思います(システムで開いているファイルの最大制限については何も言っていません)。

開いているファイルの最大数に関して2つの制限があります。

  1. プロセスごとに開くことができるファイルの最大制限/プロセス.

    • 次を使用して、この制限の値を確認できます:ulimit -n
    • この制限は、ulimit -n new_limit_numberを使用して変更できます
    • 以下は、多くのファイルを開いている上位10プロセスを取得するコマンドです。

      lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head
      
  2. システムごとのオープンファイルの最大制限。

    • 次を使用して、この制限の値を確認できます:cat /proc/sys/fs/file-max
    • この制限は、echo new_limit_number > /proc/sys/fs/file-maxを使用して変更できます
    • 開いているすべてのファイルハンドルをカウントします:lsof | wc -l
9
Radu Rădeanu

ほとんどの場合、inotifyウォッチを使い果たしました。おそらく、いくつかのファイル同期ツール(Dropboxなど)をバックグラウンドで実行していますか?

Linuxでは、tail -fコマンドの内部実装はデフォルトでinotifyメカニズムを使用して、ファイルの変更を監視します。すべてのinotifyウォッチ(デフォルトでは8192)を使い果たした場合、inotify -fはポーリングに切り替えて、そのファイルへの変更を検出する必要があります。

もちろん、inotifyウォッチの最大数を変更できます。

参照:
http://www.quora.com/How-is-tail-f-implemented
http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html
https://serverfault.com/questions/510708/tail-inotify-cannot-be-used-reverting-to-polling-too-many-open-files

6
zeekvfu

sysctl fs.inotify.max_user_instancesは、inotifyに対してユーザーごとに制限を取得します。

私はそれを経験し、システム全体の制限はすべて十分に高かったが、ユーザーによる設定は通常デフォルトで比較的低く、sysctl.confで増やして、sysctl -pでリロードできます。

3
JBat

走る

ps aux | grep tail

crontabによる生成など、実行中のテールコマンドが多すぎるかどうかを確認します。

3
tangxinfa

カーネルのバージョンを確認してください。このバグの可能性があります。

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1101666

0
thom