在從 CentOS 6 遷移到 CentOS 7 的過程當中,可能有一些地方須要調整,最顯著的地方莫過於 systemd 帶來的改變,不一樣的管理服務的方式,不一樣的日誌方式,設置時區,時間等等。 固然,除了這些顯而易見的改變以外,有些變化並非那麼引人注目,例如這裏要介紹的你可能發現曾經配置了正確的 /etc/security/limits.conf 在 CentOS 7 中卻沒有生效了。nginx
若是遇到上面的問題,極可能已經致使了你的應用異常了,例如:之前配置了服務的 nproc
爲一個很是大的數值, 結果如今發現服務不能打開更多的文件。ide
驚訝之餘,查看服務的 /proc/<pid>/limits
卻發現:spa
1 Max open files 1024 1024 files
那麼,爲何服務使用 systemd 啓動就沒有生效呢?rest
根據 redhat bugzilla 754285, systemd 其實是會忽略 /etc/security/limits.conf
,下面是 systemd 2 號人物的回答:日誌
而這個 bug 也標記爲已解決,在 pam 包中解決,這個包包含了 /etc/security/limits.conf
, 在這個文件中加入了以下注釋:code
# /etc/security/limits.conf # #This file sets the resource limits for the users logged in via PAM. #It does not affect resource limits of the system services. #
注意,這裏的 system services 指的是 system wide service,對於 CentOS 7 來講也就是系統的 service。blog
systemd 還能夠對普通用戶啓動,使用 --user
參數。進程
在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。
1 DefaultLimitCORE=infinity 2 DefaultLimitNOFILE=100000 3 DefaultLimitNPROC=100000
而後運行以下命令,才能生效。
1 sudo systemctl daemon-reload 2 sudo systemctl restart nginx.service
查看一個進程的limit設置:cat /proc/YOUR-PID/limits
例如個人一個nginx service的配置效果:
1 $cat /proc/$(cat /var/run/nginx.pid)/limits 2 Limit Soft Limit Hard Limit Units 3 Max cpu time unlimited unlimited seconds 4 Max file size unlimited unlimited bytes 5 Max data size unlimited unlimited bytes 6 Max stack size 8388608 unlimited bytes 7 Max core file size unlimited unlimited bytes 8 Max resident set unlimited unlimited bytes 9 Max processes 100000 100000 processes 10 Max open files 100000 100000 files 11 Max locked memory 65536 65536 bytes 12 Max address space unlimited unlimited bytes 13 Max file locks unlimited unlimited locks 14 Max pending signals 1030606 1030606 signals 15 Max msgqueue size 819200 819200 bytes 16 Max nice priority 0 0 17 Max realtime priority 0 0 18 Max realtime timeout unlimited unlimited us
順便提一下,我還被CentOS7自帶的/etc/security/limits.d/20-nproc.conf文件坑過,裏面默認設置了非root用戶的最大進程數爲4096,難怪我上次在limits.conf中設置了沒啥效果,原來被limit.d目錄中的配置覆蓋了。