问题描述
我在Ubuntu 17.04上。试图提高打开文件的限制,但我在网上找到的所有说明均无效。我可以提高到4096,但不能超过该范围。
$ ulimit -n
1024
$ ulimit -n 4096
$ ulimit -n
4096
这样可行。这不是:
$ ulimit -n 4097
bash: ulimit: open files: cannot modify limit: Operation not permitted
似乎是由于硬限制:
$ ulimit -Hn
4096
我尝试将这些行添加到/etc/security/limits.conf中:
* hard nofile 65535
* soft nofile 65535
root soft nofile 65535
root hard nofile 65535
还将以下行添加到/etc/pam.d/common-session和/etc/pam.d/common-session-noninteractive:
session required pam_limits.so
从那以后,我重新启动了计算机。对limits.conf的更改似乎没有任何影响。硬限制仍然停留在4096,阻止我继续前进。如何增加我的打开文件限制?
这是一些其他配置信息:
$ cat /proc/sys/fs/file-max
1624668
最佳思路
好的,我终于明白了。我在/etc/security/limits.conf
中设置的限制已应用,但未将其应用于图形登录。可以从终端窗口中这样验证:
$ ulimit -n
4096
$ su mkasberg
Password:
$ ulimit -n
65535
更多的研究使我想到了bug report,这使我指向了正确的方向。为了修改登录shell使用的限制,我们需要在/etc/systemd/user.conf
中添加以下行:
DefaultLimitNOFILE=65535
该更改有效,但仅影响软限制。 (使我们仍然具有4096的硬限制。)为了同时影响硬限制,我们必须使用相同的更改来修改/etc/systemd/system.conf
。
我在/etc/pam.d
中所做的更改是不必要的。至少在Ubuntu上,这已经起作用了。另外,也没有必要在limits.conf中更改root
和*
的设置。至少对于我的用例而言,更改mkasberg
的限制就足够了。
综上所述
如果要增加ulimit -n
显示的限制,则应该:
-
用以下行修改
/etc/systemd/user.conf
和/etc/systemd/system.conf
(这需要图形登录):DefaultLimitNOFILE=65535
-
用以下几行修改
/etc/security/limits.conf
(这需要非GUI登录):mkasberg hard nofile 65535 mkasberg soft nofile 65535
-
重新启动计算机以使更改生效。
次佳思路
无需更改/etc/security/limits.conf
文件中的任何内容,如果使用systemd,它将被忽略。
(在网络上复制修改后的answer to another question …)
对于不希望编辑默认/etc/systemd/system.conf
和/etc/systemd/user/conf
文件的用户的替代方法:
-
使用以下内容创建一个新文件
/etc/systemd/system.conf.d/limits.conf
:[Manager] DefaultLimitNOFILE=65535
-
以root身份运行
systemctl daemon-reexec
-
注销并再次登录
-
使用
ulimit -n
检查新的限制。
有关详细信息,请参见systemd-system.conf
手册页。