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

Centos 5/6中的文件描述符配置

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

*     soft   nofile    65535
*     hard   nofile    65535
*     soft   nproc     65535
*     hard   nproc     65535

Centos7中的变化

不过,在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=65535
DefaultLimitNPROC=65535

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

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


编辑 
/usr/lib/systemd/system/nginx.service 
或者 
/usr/lib/systemd/system/nginx.service.d/my-limit.conf 文件,做如下配置:
[Service]
LimitCORE=infinity
LimitNOFILE=65535
LimitNPROC=65535

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

sudo systemctl daemon-reload
sudo systemctl restart nginx.service

注意:CentOS7自带的/etc/security/limits.d/20-nproc.conf

里面默认设置了非root用户的最大进程数为4096,limits.conf设置没效果,limit.d目录中的配置覆盖了。

参考文档: man systemd man systemd-system.conf man bash 搜索一下ulimit

results matching ""

    No results matching ""