Fedora
誰在消耗我的 inotify 資源?
在最近升級到 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
似乎如果程序通過 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
除非我誤解了這個概念,否則以下命令應該向您顯示程序列表(它們在 /proc 中的表示),按它們使用的 inotify 實例數排序。
$ 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