CentOS 7 systemd的坑

1、概述

 在從 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 參數。進程

2、解決之道

 在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目錄中的配置覆蓋了。

相關文章
相關標籤/搜索