我正在尝试通过 增加 root 用户和非 root 用户的打开文件限制/etc/security/limits.conf
。但是,无法超过999999
,任何超过此值的值都会恢复为默认值1024
,我也无法将其设置为无限制
这是我的limits.conf
* hard nofile 999999
* hard nofile 999999
root hard nofile 999999
root soft nofile 999999
以上工作正常并ulimit -n
返回999999
。
但是,如果我将值提高一级或达到unlimited
或-1
或infinity
它不起作用。ulimit -n
返回1024
我在这里提到:limits.conf - pam_limits 模块的配置文件 | Ubuntu 手册页
谢谢
答案1
我知道已经晚了 10 个月,但您已经为所有用户设置了两次硬限制。将第二行更改为软限制。
* hard nofile 999999
* soft nofile 999999
root hard nofile 999999
root soft nofile 999999
完成此操作后你应该看到:
$ ulimit -n
999999
$
由于限制已正确定义,因此您的文件应该始终适用于 root。
此外,您不能使用 -1、无穷大、无限大或类似的值,您必须使用文字值。此值的最大支持值在内核中定义,并在 /proc/sys/fs/nr_open 中公开。在我的 centos 7 和 debian strech 环境中,我得到相同的值:
$ cat /proc/sys/fs/nr_open
1048576
$
您还必须启动新的会话才能更新限制。
答案2
为了使其正常工作,需要修改三个文件:
/etc/security/limits.conf
/etc/pam.d/common-session
/etc/pam.d/common-session-noninteractive
您已经在第一个文件中添加了所需的行,然后在另外两个文件中需要这一行:
session required pam_limits.so
请注意:
大多数资源都忽略了强调的一点是,负责执行进程的任何程序都很容易修改您的限制。如果 ulimit -n(以正确的用户身份运行)为您提供了您刚刚设置的数字,但 cat /proc/{process_id}/limits 仍然打印出较低的数字,则几乎可以肯定是进程管理器、初始化脚本或类似的东西弄乱了您的限制。您还需要记住,进程会继承父进程的限制。
因此,如果存在这样的过程,那么您将必须修改配置文件才能使其工作。
来源: https://underyx.me/2015/05/18/raising-the-maximum-number-of-file-descriptors