在Linux上运行Apache和Jboss,有时我的服务器意外停止说问题是太多打开文件。
我知道我们可能会在 /etc/security/limits.conf 为 nproc 和 nofile 设置更高的限制来修复打开文件问题,但我试图获得更好的输出,例如使用 watch 来实时监控它们。
使用此命令行,我可以看到每个PID打开的文件数量:
lsof -u apache | awk '{print $2}' | sort | uniq -c | sort -n
输出(第1列是用户apache的打开文件数):
1 PID
1335 13880
1389 13897
1392 13882
如果我可以添加watch命令就足够了,但下面的代码不起作用:
watch lsof -u apache | awk '{print $2}' | sort | uniq -c | sort -n
答案 0 :(得分:5)
您应该将命令内部引用如下:
watch 'lsof -u apache | awk '\''{print $2}'\'' | sort | uniq -c | sort -n'
或者您可以将命令放入像test.sh这样的shell脚本中,然后使用watch。
chmod +x test.sh
watch ./test.sh
答案 1 :(得分:3)
此命令将告诉您Apache打开了多少个文件:
ps -A x |grep apache | awk '{print $1}' | xargs -I '{}' ls /proc/{}/fd | wc -l
您可能必须以root身份运行它才能访问进程fd目录。这听起来像你有一个没有关闭其文件描述符的Web应用程序。我会集中精力在那个领域。