尾巴:无法使用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.