尾巴:无法使用inotify,恢复为轮询:打开的文件过多


16

当我尝试时tail -f catalina.out,出现错误:

tail: inotify cannot be used, reverting to polling: Too many open files 

我在这篇文章中尝试了答案: 打开的文件太多-如何找到罪魁祸首

lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head

当我运行以上命令时,输出为

17 6115

13 6413

10 6417

10 6415

9 6418

9 6416

9 6414

8 6419

4 9 

4 8

我看不到有打开1024个文件的任何进程。打开的文件数量不是17,13,10,10,9吗?还是我理解错了?所有这些都是bash,sshd,apache2,tomcat的编号为4。

我也没有lsof | grep tail | wc -l 哪个返回20。这些数字不是很大,为什么会tail -f catalina.out失败?

Answers:


17

遵循http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html上的说明为我解决了此问题

永久解决方案(在重新启动后保留)添加行:

fs.inotify.max_user_watches=1048576

至:

/etc/sysctl.conf

永久固定极限值(即使在两次重启之间)。

然后做一个

sysctl -p

1
增加文件描述符对我没有帮助。我的tail讯息略有不同:tail: inotify resources exhausted。这个答案帮助了我。您也可以使用sudo sysctl -w fs.inotify.max_user_watches=1048576 && sysctl -p它来测试是否有帮助,而无需永久修改它。这篇文章也有助于nefaria.com/2014/08/tail-inotify-resources-疲惫
— Ruslan Stelmachenko

9

我认为答案是不完整的(它没有说关于在系统上打开的文件的最大限制)。

关于打开文件的最大数量有两个限制:

  1. 每个进程打开文件的最大限制。

    • 您可以使用以下命令查看此限制的值: ulimit -n
    • 您可以使用以下方法更改此限制: ulimit -n new_limit_number
    • 这是一条命令,用于打开文件最多的前10个进程:

      lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head
  2. 每个系统打开文件的最大限制。

    • 您可以使用以下命令查看此限制的值: cat /proc/sys/fs/file-max
    • 您可以使用以下方法更改此限制: echo new_limit_number > /proc/sys/fs/file-max
    • 计算所有打开的文件句柄: lsof | wc -l

6

很可能是您的inotify手表用完了。可能您是在后台运行一些文件同步工具(例如Dropbox)?

在Linux中,默认情况下,tail -f命令的内部实现使用该inotify机制来监视文件更改。如果您用完了所有inotify手表(默认为8192),则inotify -f必须切换到轮询以检测对该文件的更改。

当然,您可以修改inotify手表的最大数量。

参考:
http : //www.quora.com/How-is-tail-f-implemented
http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html
https:// serverfault.com/questions/510708/tail-inotify-无法使用恢复到轮询太多打开文件


3

sysctl fs.inotify.max_user_instances将为每个用户限制inotify。

我经历过,并且所有限制系统范围都足够高,但是默认情况下,用户设置通常相对较低,您可以增加它sysctl.conf并重新加载它sysctl -p。


3

跑

ps aux | grep tail

检查是否运行了太多的tail命令,例如crontab生成的命令。


确实有效,拖了太多文件
— Alexander Mills

如何转换数据?您能否解释每条信息的含义以及如何处理?例如:root 20161 0.0 0.0 11132 1044 pts/0 S+ 17:27 0:00 grep tail
— Christia

仅当TOO MANY进程匹配时才有问题,匹配的行包含“ grep”是由命令本身生成的。请改用“ pgrep tail”命令。
— tangxinfa

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.