1. 程式人生 > >centos 7.x設定守護程序的檔案數量限制

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