我的inotify监视限制设置为1024(我认为默认值是128?).尽管如此,自耕农,Guard和Dropbox经常失败,并告诉我提高我的inotify限制.在这之前,我想知道我的所有手表消耗了什么(我的Dropbox中的文件很少).
是否有/ proc或/ sys的某些区域,或者我可以运行的某些工具,以找出当前注册的手表?
Dav*_*nós 39
inotify文件系统选项
sysctl fs.inotify
打开文件
lsof | grep inotify | wc -l
像这样增加值
sysctl -n -w fs.inotify.max_user_watches=16384sysctl -n -w fs.inotify.max_user_instances=512oli*_*ren 32
我已经在@cincodenada 提到的 Unix Stackexchange 上的同一个线程中回答了这个问题,但我想我可以在这里重新发布我的现成答案,因为没有人真正有一些可行的方法:
我有一个预制脚本, inotify-consumers,它为您列出了最严重的罪犯(较新的版本还列出了拥有该进程的用户名,见下文):
$ time inotify-consumers
INOTIFY
WATCHER
COUNT PID CMD
----------------------------------------
6688 27262 /home/dvlpr/apps/WebStorm-2018.3.4/WebStorm-183.5429.34/bin/fsnotifier64
411 27581 node /home/dvlpr/dev/kiwi-frontend/node_modules/.bin/webpack --config config/webpack.dev.js
79 1541 /usr/lib/gnome-settings-daemon/gsd-xsettings
30 1664 /usr/lib/gvfs/gvfsd-trash --spawner :1.22 /org/gtk/gvfs/exec_spaw/0
14 1630 /usr/bin/gnome-software --gapplication-service
....
7489 WATCHERS TOTAL COUNT
real 0m0.099s
user 0m0.042s
sys 0m0.062s
Run Code Online (Sandbox Code Playgroud)
在这里,您很快就会明白为什么在开发机器上 8K 观察者的默认限制太少,因为当遇到一个node_modules包含数千个文件夹的文件夹时,WebStorm 实例会迅速达到最大值。添加一个 webpack watcher 来保证问题......
尽管它比我最初制作时的其他替代方案快得多,但 Simon Matter 为重载的 Big Iron Linux(数百个内核)添加了一些速度增强功能,极大地加快了速度,将其从 10 分钟(!)减少到 15 分钟在他的怪物装备上的几秒钟。
inotify-consumers --help 为了得到它你的机器上,只需要复制该脚本的内容并把它放在你的$PATH一样/usr/local/bin。或者,如果您信任网络上的这个陌生人,您可以避免复制它并通过 http 将其通过管道传输到 bash:
$ curl -s https://raw.githubusercontent.com/fatso83/dotfiles/master/utils/scripts/inotify-consumers | bash
INOTIFY
WATCHER
COUNT PID USER COMMAND
--------------------------------------
3044 3933 myuser node /usr/local/bin/tsserver
2965 3941 myuser /usr/local/bin/node /home/myuser/.config/coc/extensions/node_modules/coc-tsserver/bin/tsserverForkStart /hom
979 3954 myuser /usr/local/bin/node /home/myuser/.config/coc/extensions/node_modules/coc-tsserver/node_modules/typescript/li
1 7473 myuser /usr/local/bin/node --no-warnings /home/myuser/dev/dotfiles/common-setup/vim/dotvim/plugged/coc.nvim/build/i
1 3899 myuser /usr/local/bin/node --no-warnings /home/myuser/dev/dotfiles/common-setup/vim/dotvim/plugged/coc.nvim/build/i
6990 WATCHERS TOTAL COUNT
Run Code Online (Sandbox Code Playgroud)
作为参考,脚本的主要内容就是这个(灵感来自这个答案)
find /proc/*/fd \
-lname anon_inode:inotify \
-printf '%hinfo/%f\n' 2>/dev/null \
\
| xargs grep -c '^inotify' \
| sort -n -t: -k2 -r
Run Code Online (Sandbox Code Playgroud)
如果您想知道如何增加限制
$ inotify-consumers --limits
Current limits
-------------
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 524288
Changing settings permanently
-----------------------------
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p # re-read config
Run Code Online (Sandbox Code Playgroud)
zee*_*vfu 15
默认最大inotify手表数量为8192; 可以通过写入/ proc/sys/fs/inotify/max_user_watches来增加它.
您可以sysctl fs.inotify.max_user_watches用来检查当前值.
使用tail -f验证,如果你的OS不超过inotify最高限额的手表.命令
的内部实现tail -f使用该inotify机制来监视文件更改.
如果您的inotify手表耗尽,您很可能会收到此错误:
tail:inotify不能使用,恢复轮询:打开文件太多
参考:
https://askubuntu.com/questions/154255/how-can-i-tell-if-i-am-out-of-inotify-watches
https://unix.stackexchange.com/questions/15509/whos -consuming-my-inotify-resources
https://bbs.archlinux.org/viewtopic.php?pid=1340049
我认为
sudo ls -l /proc/*/fd/* | grep notify
Run Code Online (Sandbox Code Playgroud)
可能有用。您将获得注册了 inotify fd 的 pid 列表。
我不知道如何获得比这更多的信息!华泰