正常在Linux下,对打开的文件描述符的数量限制设置有两个地方:
sudo sysctl -a | grep file-max
是全局最多可打开文件描述符设置sudo ulimit -n
是单进程最多可打开的文件描述符设置
全局的最大打开数量修改比较容易,只需要在/etc/sysctl.conf
中添加fs.file-max
并指定值即可,如fs.file-max = 6553500
.
单进程的最大打开数量设置就比较坑了,我当前用的是Ubuntu 18.04,若仅是Server版本Ubuntu或是用SSH登陆的情况下,只需在/etc/security/limits.conf
添加如下:
* soft nofile 1024000
* hard nofile 1024000
# 16.04下用 * 会无效,需要指定用户如:
root soft nofile 1024000
root hard nofile 1024000
不过种方式在图形界面下,这并不起效, 除非是 SSH 登录来的.
根据systemd-system.conf的manpage说明,你只需在/etc/systemd/system.conf
或/etc/systemd/user.conf
中设置DefaultLimitNOFILE=
的值,或在/etc/systemd/system.conf.d/
或etc/systemd/user.conf.d/
目录下新建一个 conf 文件,并在其中指定DefaultLimitNOFILE=
的值即可。
实际这里有个坑。
如果仅在/etc/systemd/user.conf
文件或者/etc/systemd/user.conf.d
目录下指定的DefaultLimitNOFILE=
值,那么它最大依旧只能是4096.
真正要改的是/etc/systemd/system.conf
文件或/etc/systemd/system.conf.d/
目录下的 conf 文件,设定DefaultLimitNOFILE=
的值即可。
如DefaultLimitNOFILE=1024000
,然后执行systemctl daemon-reexec
注销再重新登陆即生效,或者直接重启也行.