太多打开的文件 – 如何找到罪魁祸首
运行tail -f filename
,我收到以下消息:
tail: inotify cannot be used, reverting to polling: Too many open files
这是一个潜在的问题吗?
如何诊断对所有打开文件负责的内容? 我有一个可疑进程列表,但如果它们不会成为罪魁祸首,那些不依赖于知道要检查哪个进程的指令将是有用的。
您可以使用lsof来了解谁打开了这么多文件。 通常它是一个打开如此多文件的(Web)服务器,但lsof肯定会帮助您确定原因。
一旦你明白谁是坏人你就可以
- 杀死进程/停止程序
- 提高ulimit http://posidev.com/blog/2009/06/04/set-ulimit-parameters-on-ubuntu/
如果来自lsof的输出非常大,请尝试将其重定向到文件,然后打开该文件
示例(您可能必须按Ctrl + C第一个命令)
lsof > ~/Desktop/lsof.log cat ~/Desktop/lsof.log | awk '{ print $2 " " $1; }' | sort -rn | uniq -c | sort -rn | head -20 vim ~/Desktop/lsof.log
万一其他人需要它……
ulimit -a
将显示所有当前限制。 特别是ulimit -n 70000
将设置文件描述符限制。
也…
cat /proc/sys/fs/file-max
如果编辑,将显示/设置内核限制。
sudo echo 200000 > /proc/sys/fs/file-max
更详细的解释可以在…找到
如何增加非root用户的打开文件限制?