将进程可以打开的文件数量提高到 2^20 以上

Raise number of files a process can open beyond 2^20

我是运行一个python进程,一次打开很多个内存映射文件。目前它失败并显示 OSError 因为它试图打开超过系统允许的数量。我需要将 ulimit -n 设置为至少 460 万,但这样做会导致

bash: ulimit: open files: cannot modify limit: Operation not permitted.

但我是root!怎么会不允许呢?

但是,如果我尝试将限制设置为小于 2^20 的值,它可以正常工作。在 python 中使用 resource 包同样的事情:低于 2^20 有效;超过 2^20 表示 ValueError: not allowed to raise maximum limit.

我已将 /proc/sys/fs/file-max 编辑为 1 亿。我已将 /etc/security/limits.conf 编辑为 nofile 1 亿的限制。我已经重启了。我已将 /etc/systemd/user.conf/etc/systemd/system.conf 中的 DefaultLimitNOFILE 编辑为 1 亿。我已经重新启动了。我已将 /etc/pam.d/common-session 编辑为 session required pam_limits.so 行。我已经重新启动了。没有骰子。

如何提高限​​制?这里没有使它不可能的物理障碍。这台机器非常强大,应该能够管理那么多打开的文件句柄。 According to this 内核中的硬编码限制约为 40 亿。

好的,我明白了。你不能只设置 fs.file-maxYou also have to set fs.nr_open,默认值为 2^20。我还删除了我创建的 /etc/pam.d/common-session 并注释掉了 /etc/pam.d/sudo.

中的 session required pam_limits.so