据我所知,在Linux中有两个限制(文件句柄)
1.在stream程层面。 这由/etc/security/limits.conf文件控制。 我已经设置为64K
2.在系统级别。 这可以在/proc/sys/fs/file-nr查看
尽pipe有这个configuration,我用完了文件句柄。 除了定期监视文件/proc/sys/fs/file-nr ,还有别的方法可以判断故障原因是处于过程级别还是系统级别?
这是一个程序的很多打开的文件。 首先我会检查程序本身是否没有故障。 它打开后是否正确closures文件?
检查运行该程序的用户是否对进程没有软限制:
$ 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