我们最近在一些服务上已经达到了最大打开文件的限制。 还有一些其他的限制。 有没有一种方法可以监控进程如何接近这些限制,以便在出现限制或修复根本原因时能够收到警报? 在同样的说明中,是否可以查看这些事件的日志,以便我们知道何时发生崩溃是因为碰到了这些限制之一?
是的你可以。 /proc/<pid>/fd列出了所有打开的文件描述符。 内存使用情况可以在/proc/<pid>/{maps,smaps} 。 只要浏览thorugh /proc/<pid>有点和谷歌文件,你不明白:)
假设一个Linux服务器。
查看全局最大打开文件:
cat /proc/sys/fs/file-max
查看全球当前打开的文件:
cat /proc/sys/fs/file-nr
更改全局最大打开文件:
sysctl -w fs.file-max=1000000 or edit sysctl.conf
查看当前用户的限制:
ulimit -Hn (hard limit) ulimit -Sn (soft limit)
更改用户限制:编辑/etc/security/limit.conf以设置Web服务器的限制
apache2 soft nofile 4096 apache2 hard nofile 10000
你可以通过/proc脚本来给你一些统计信息:
for pid in $(pgrep apache2); do ls /proc/$pid/fd | wc -l; done