据我了解,Linux 中有两个限制(对于文件句柄):
1. 在进程级别。这由文件控制/etc/security/limits.conf
。我已将其设置为 64k
2. 在系统级别。这可以在以下位置查看/proc/sys/fs/file-nr
尽管有这样的配置,我还是用完了文件句柄。除了/proc/sys/fs/file-nr
定期监控文件之外,还有其他方法可以判断故障原因是在进程级别还是系统级别?
答案1
程序打开了这么多文件。首先,我要检查程序本身是否有故障。打开文件后,程序是否能正常关闭文件?
检查运行该程序的用户的进程是否没有软限制:
$ ulimit -Sn
1024
使用 lsof 您可以查看某个进程的所有打开的文件。
lsof -p <PID>
还可以更改系统范围的限制。它们位于 /etc/sysctl.conf (fs.file-max ) 中,并且是永久的。
要查看当前限制:
cat /proc/sys/fs/file-max
1624748
或者
# sysctl fs.file-max
fs.file-max = 1624748
更改系统范围的限制,重启后将会消失。
# sysctl -w fs.file-max=2000000
fs.file-max = 2000000
# sysctl fs.file-max
fs.file-max = 2000000#
cat /proc/sys/fs/file-max
2000000