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

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

当我尝试时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失败呢?

答案1

按照以下说明,这个问题已经解决了http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html

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

fs.inotify.max_user_watches=1048576

到:

/etc/sysctl.conf

永久修复限制值(即使在重启之间)。

然后做一个

sysctl -p

答案2

我认为那个答案不完整(它没有说明系统上打开文件的最大限制)。

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

  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

答案3

sysctl fs.inotify.max_user_instances将获得每个用户的限制inotify

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

答案4

跑步

ps aux | grep tail

检查是否有太多的尾部命令正在运行,例如由 crontab 生成的命令。

相关内容