Fedora

誰在消耗我的 inotify 資源?

  • September 15, 2021

在最近升級到 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

引用自:https://unix.stackexchange.com/questions/15509