13

在 Linux 上运行 Apache 和 Jboss,有时我的服务器会意外停止,说问题是打开的文件太多。

我知道我们可能会在/etc/security/limits.conf为nprocnofile设置更高的限制来解决打开文件的问题,但我正在努力获得更好的输出,例如使用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
4

2 回答 2

6

您应该将命令放在引号内,如下所示:

watch 'lsof -u apache | awk '\''{print $2}'\'' | sort | uniq -c | sort -n'

或者您可以将命令放入像 test.sh 这样的 shell 脚本中,然后使用 watch。

chmod +x test.sh
watch ./test.sh
于 2014-10-29T12:30:55.187 回答
4

This command will tell you how many files Apache has opened:

ps -A x |grep apache | awk '{print $1}' | xargs -I '{}' ls /proc/{}/fd  | wc -l

You may have to run it as root in order to access the process fd directory. This sounds like you've got a web application which isn't closing its file descriptors. I would focus my efforts on that area.

于 2013-09-13T14:43:48.320 回答