在Linux中为特定用户运行的每个进程有多少个打开的文件

时间:2013-09-13 14:28:53

标签: linux lsof

在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

2 个答案:

答案 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应用程序。我会集中精力在那个领域。