最近,我们已达到一些服务的最大打开文件数限制。此外,还存在许多其他限制。有没有办法监控进程接近这些限制的程度,以便在需要提高限制或修复根本原因时收到警报?同样,是否可以查看这些事件的日志,以便我们知道崩溃是由于达到其中一个限制而发生的?
答案1
是的,你可以。/proc/<pid>/fd
列出所有打开的文件描述符。内存使用情况可以在中看到/proc/<pid>/{maps,smaps}
。只需浏览/proc/<pid>
一下并谷歌一下你不理解的文件 :)
答案2
假设是一个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
以设置网络服务器的限制,例如
apache2 soft nofile 4096
apache2 hard nofile 10000
您可以运行一个脚本/proc
并得到一些统计数据:
for pid in $(pgrep apache2); do ls /proc/$pid/fd | wc -l; done