centos 7.x设置守护进程的文件数量限制

在Bash中有个ulimit命令,提供了对Shell及该Shell启动的进程的可用资源控制。主要包括打开文件描述符数量、用户的最大进程数量、coredump文件的大小等。

在CentOS 5/6等版本中,资源限制的配置可以在/etc/security/limits.conf设置,针对root/user等各个用户或者*代表所有用户来设置。 当然,/etc/security/limits.d/ 中可以配置,系统是先加载limits.conf然后按照英文字母顺序加载limits.d目录下的配置文件,后加载配置覆盖之前的配置。 一个配置示例如下:

*   soft  nofile  100000
*   hard  nofile  100000
*   soft  nproc   100000
*   hard  nproc   100000
*   soft  core   100000
*   hard  core   100000

不过,在CentOS 7/RHEL 7的系统中,使用Systemd替代了之前的SysV,因此/etc/security/limits.conf 文件的配置作用域缩小了一些。limits.conf这里的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。登录用户的限制,与上面讲的一样,通过/etc/security/limits.conf和 limits.d来配置即可。

对于systemd service的资源限制,如何配置呢?

全局的配置,放在文件/etc/systemd/system.conf/etc/systemd/user.conf。 同时,也会加载两个对应的目录中的所有.conf文件/etc/systemd/system.conf.d/*.conf/etc/systemd/user.conf.d/*.conf
其中,system.conf是系统实例使用的,user.conf用户实例使用的。一般的sevice,使用system.conf中的配置即可。systemd.conf.d/*.conf中配置会覆盖system.conf。

DefaultLimitCORE=infinity
DefaultLimitNOFILE=100000
DefaultLimitNPROC=100000

注意:修改了system.conf后,需要重启系统才会生效。

针对单个Service,也可以设置,以nginx为例。

编辑/usr/lib/systemd/system/nginx.service文件,或者/usr/lib/systemd/system/nginx.service.d/my-limit.conf文件,做如下配置:

[Service]
LimitCORE=infinity
LimitNOFILE=100000
LimitNPROC=100000

然后运行如下命令,才能生效。

sudo systemctl daemon-reload
sudo systemctl restart nginx.service

查看一个进程的limit设置:cat /proc/YOUR-PID/limits

例如我的一个nginx service的配置效果:

$ cat /proc/$(cat /var/run/nginx.pid)/limits

Limit           Soft Limit      Hard Limit      Units
Max cpu time       unlimited      unlimited      seconds
Max file size       unlimited      unlimited      bytes
Max data size       unlimited      unlimited      bytes
Max stack size      8388608       unlimited      bytes
Max core file size    unlimited      unlimited      bytes
Max resident set     unlimited      unlimited      bytes
Max processes       100000        100000        processes
Max open files      100000        100000        files
Max locked memory     65536        65536        bytes
Max address space     unlimited      unlimited      bytes
Max file locks      unlimited      unlimited      locks
Max pending signals    1030606       1030606       signals
Max msgqueue size     819200        819200        bytes
Max nice priority     0          0
Max realtime priority   0          0
Max realtime timeout   unlimited      unlimited      us

顺便提一下,CentOS7自带的/etc/security/limits.d/20-nproc.conf,里面默认设置了非root用户的最大进程数为4096,被limit.d目录中的配置覆盖了。

参考文档:

man systemd man systemd-system.conf

dawei

【声明】:唐山站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。