我编写了一个打开大量文件的小程序,并在 Ubuntu 上(以 root 身份)尝试了打开文件数限制。令我惊讶的是,只有用户级限制对打开文件的最大数量有影响。
我在 /etc/security/limits.conf 中添加了以下内容:
root hard nofile 30000
root soft nofile 30000
并将 /proc/sys/fs/file-max 设置为 20000(sysctl -w fs.file-max=20000
)。
然后我运行我的程序,打开 29000 个文件,没有任何问题。
为什么在这种情况下系统级设置没有任何效果?
答案1
我明白了,总结一下 -
用户级别限制在 Linux 上设置在 /etc/security/limits.conf (或 /limits.d 目录下)
系统级限制在 /etc/sysctl.conf 中设置(可以通过这样的命令立即更改sysctl -w fs.file-max=20000
:)
在我的初始测试中,系统级的打开文件限制被忽略了,因为我正在运行我的程序根,所以这是一个特权过程,Linux 上的特权进程绕过所有内核权限检查(http://linux.die.net/man/7/capabilities)