centos 7.x設置守護進程的文件數量限制
在Bash中有個ulimit命令,提供了對Shell及該Shell啟動的進程的可用資源控制。主要包括打開文件描述符數量、用戶的最大進程數量、coredump文件的大小等。
1. 系統級設置
1.1 CentOS 5/6
在CentOS 5/6等版本中,資源限制的配置可以在/etc/security/limits.conf設置,針對root/user等各個用戶或者*代表所有用戶來設置。
當然,/etc/security/limits.d/
中可以配置,系統是先加載limits.conf然後按照英文字母順序加載limits.d目錄下的配置文件,後加載配置覆蓋之前的配置。 一個配置示例如下:
soft nofile 100000hard nofile 100000 soft nproc 100000 hard nproc 100000 soft core 100000 hard core 100000
1.2 CentOS 7/RHEL 7
在CentOS 7/RHEL 7的系統中,使用Systemd替代了之前的SysV,因此/etc/security/limits.conf 文件的配置作用域縮小了一些。
limits.conf這裏的配置,只適用於通過PAM認證登錄用戶的資源限制,它對systemd的service的資源限制不生效。登錄用戶的限制,與centos 5/6一樣,通過/etc/security/limits.conf和
limits.d來配置即可。
2. systemd service的資源限制設置
2.1 全局的配置
配置位置有兩個位置:/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後,需要重啟系統才會生效。
2.2 單個service配置
針對單個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
centos 7.x設置守護進程的文件數量限制