Linux中为特定用户运行的每个进程有多少打开的文件
在Linux上运行Apache和Jboss时,有时我的服务器会意外停止,说问题是打开的文件太多 我知道我们可能会在/etc/security/limits.conf上为nproc和nofile设置一个更高的限制,以修复打开的文件问题,但我正在尝试获得更好的输出,例如使用watch实时监视它们 通过此命令行,我可以看到每个PID有多少打开的文件: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
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