# tail -f /var/log/messages
[...]
tail: cannot watch '/var/log/messages': No space left on device
# inotifywatch -v /var/log/messages
Establishing watches...
Failed to watch /var/log/messages; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via '/proc/sys/fs/inotify/max_user_watches'.`
我用Google搜索了一下我发现的解决方案是使用以下方法提高限额:
sudo sysctl fs.inotify.max_user_watches=<some random high number>
,但是我找不到任何有关提高该值的后果的信息。我猜默认的内核值设置是有原因的,但是对于特定的用法似乎还不够。 (例如,当使用具有大量文件夹的Dropbox或监视大量文件的软件时)
所以这是我的问题:
可以安全地提高该价值,过高的价值会带来什么后果?
有没有办法找出当前设置的手表是什么,以及通过哪些过程设置它们,以便能够确定达到的极限不是由错误的软件引起的?
#1 楼
提高价值是否安全?价值过高会带来什么后果?是的,提高价值很安全,并且以下是可能的成本[来源]:
每个使用的inotify监视占用540字节(32位系统)或1 kB(64位上的双精度)[来源:1、2]
这来自内核内存,这是不可交换的。
假设您将最大值设置为524288,并且全部使用(不可能),那么您将使用大约256MB / 512MB的32位/ 64位内核内存。
请注意,您的应用程序还将使用额外的内存来跟踪inotify句柄,文件/目录路径等-多少取决于其设计。
要检查有声手表的最大数量:
cat /proc/sys/fs/inotify/max_user_watches
设置有声手表的最大数量
/>
以最终的首选值运行
sudo sysctl fs.inotify.max_user_watches=
。将
fs.inotify.max_user_watches=524288
放入您的 sysctl设置。根据您的系统,它们可能位于以下位置之一:Debian / RedHat:
/etc/sysctl.conf
Arch:将新文件放入
/etc/sysctl.d/
中,例如/etc/sysctl.d/40-max-user-watches.conf
您可能希望重新加载sysctl设置以避免重启:
sysctl -p
(Debian / RedHat)或sysctl --system
(Arch)检查查看是否已达到inotify监视的最大数量:
在任何旧文件上使用
tail
和-f
(跟随)选项,例如tail -f /var/log/dmesg
:-如果一切顺利,它将显示最后10行并暂停;用Ctrl-C放弃
-如果您不在手表范围内,它将因以下神秘错误而失败:
tail: cannot watch '/var/log/dmsg': No space left on device
查看正在用尽的inotify手表
find /proc/*/fd -lname anon_inode:inotify |
cut -d/ -f3 |
xargs -I '{}' -- ps --no-headers -o '%p %U %c' -p '{}' |
uniq -c |
sort -nr
第一列显示inodify fds的数量(虽然不是手表的数量),第二列显示该进程的PID(来源:1、2]。
评论
我猜很少有代码需要比默认Dropbox高的值,而Dropbox可能需要更高的限制,具体取决于您拥有多少个文件。我没有问题地提出了我的要求。实际上,Dropbox通知(在达到其限制时会发生)明确地告诉您提高它。
–法尔玛里
11年5月25日在20:55
@ ultrasawblade- inotify替换为dnotify。 dnotify缓慢且有故障。 inotify可以在目录上使用,并且修改目录中的一个文件(深一层)后,该目录将被“更改”。目录只是文件。
–beatgammit
2011年7月10日5:14
“永久:替换/ proc / sys / fs / inotify / max_user_watches中的值” <-这是不正确的。要使它永久存在,您需要更改/etc/sysctl.conf
– Merc
16年5月7日在4:38
sysctl!= systemd,在您的解释中。 /etc/sysctl.d也可以在较新的基于RedHat的系统上使用。
–aairey
17年1月6日在6:56
@stackexchanger如果您非常确定它们相似(例如,您已经测试过),请提交并编辑问题。我本人还没有检查过,而且我知道发行版倾向于修补软件包,因此相同软件包的行为可能有所不同。更不用说软件包版本的差异了。
– tshepang
17年1月8日在22:55
评论
既然您已经检查了8个月,您可能已经检查过了,但是驱动器是否已满? “尾巴:无法观看'/ var / log / messages':设备上没有剩余空间”