了解 Linux 文件句柄限制的差异

了解 Linux 文件句柄限制的差异

据我了解,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

相关内容