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

Linux中为特定用户运行的每个进程有多少打开的文件,linux,lsof,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列是用户apach

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

我知道我们可能会在/etc/security/limits.conf上为nproc和nofile设置一个更高的限制,以修复打开的文件问题,但我正在尝试获得更好的输出,例如使用watch实时监视它们

通过此命令行,我可以看到每个PID有多少打开的文件:

lsof -u apache | awk '{print $2}' | sort | uniq -c | sort -n
输出(第1列是用户apache打开的文件):

如果我可以添加watch命令就足够了,但是下面的代码不起作用:

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

此命令将告诉您Apache已打开了多少文件:

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

您可能必须以root用户身份运行它才能访问进程fd目录。这听起来像是一个web应用程序没有关闭其文件描述符。我会把精力集中在这方面。

您应该将命令放在下面的引号中:

watch 'lsof -u apache | awk '\''{print $2}'\'' | sort | uniq -c | sort -n'
或者,您可以将该命令放入类似test.sh的shell脚本中,然后使用watch

chmod +x test.sh
watch ./test.sh
chmod +x test.sh
watch ./test.sh