Fedora 15に最近アップグレードした後、次のエラーが原因で多くのツールが失敗することがわかりました。
tail: inotify resources exhausted
tail: inotify cannot be used, reverting to polling
これは単にtail
inotify問題を報告する以上のものです。どのプロセスがinotifyリソースを消費しているかを調べるためにカーネルを調べる方法はありますか?現在、Inotify関連のsysctl
設定は次のとおりです。
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 8192
fs.inotify.max_queued_events = 16384
ベストアンサー1
プロセスがinotify_init()を介してinotifyインスタンスを作成すると、/ procファイルシステムのファイル記述子を表す結果ファイルは(存在しない)ファイル「anon_inode:inotify」へのシンボリックリンクであるようです。
$ cd /proc/5317/fd
$ ls -l
total 0
lrwx------ 1 puzel users 64 Jun 24 10:36 0 -> /dev/pts/25
lrwx------ 1 puzel users 64 Jun 24 10:36 1 -> /dev/pts/25
lrwx------ 1 puzel users 64 Jun 24 10:36 2 -> /dev/pts/25
lr-x------ 1 puzel users 64 Jun 24 10:36 3 -> anon_inode:inotify
lr-x------ 1 puzel users 64 Jun 24 10:36 4 -> anon_inode:inotify
概念を誤解しない限り、次のコマンドは、使用するinotifyインスタンスの数に基づいてソートされたプロセスのリスト(/ procに表示されている)を表示する必要があります。
$ for foo in /proc/*/fd/*; do readlink -f $foo; done | grep inotify | sort | uniq -c | sort -nr
犯人を探す
これは@markkcowanが以下のコメントで言及したものです。
$ find /proc/*/fd/* -type l -lname 'anon_inode:inotify' -exec sh -c 'cat $(dirname {})/../cmdline; echo ""' \; 2>/dev/null