CentOS 7 systemd service 設(shè)置limit,不生效問題

參考文獻

問題簡述:Centos7下修改系統(tǒng)的最大文件打開數(shù)的時候,對系統(tǒng)啟動的進程不生效
問題詳述:Centos7下需修改系統(tǒng)最大文件打開數(shù)為100000,進程數(shù)為50000,于是做了如下操作

說 明:此問題只出現(xiàn)在centos7下,centos6版本不存在此問題

1:記錄未修改之前的ulimit值

image.png

2:修改配置文件

vim /etc/security/limits.conf 在后面添加
···
root soft nofile 1048576
root hard nofile 1048576

  •  soft    nproc   65535
    
  •  hard    nproc   65535
    

···
重啟機器,修改 /etc/security/limits.conf 里的配置后,需重啟機器才能生效

3:查看修改后的ulimit值

image.png

4:在這里看起來一切都很正常,也許一不小心就入坑了。為了對比現(xiàn)象,需要安裝兩個nginx,一個源碼安裝,一個yum安裝

源碼安裝:(簡單安裝,只是為了驗證和測試,不指定安裝路徑,默認是在/usr/local/nginx下)

wget http://nginx.org/download/nginx-1.8.1.tar.gz
tar -zxvf nginx-1.8.1.tar.gz
cd nginx-1.8.1
./configure
make && make install

yum安裝

yum -y install nginx

5:現(xiàn)象

1)先啟動源碼編譯的nginx,并查看進程號及l(fā)imit值,如下

啟動nginx: /usr/local/nginx/sbin/nginx
查看進程: ps -ef |grep nginx
查看某個進程的limit值: cat /proc/進程號/limits


image.png

2)yum安裝nginx啟動
啟動方法:systemctl start nginx.service ,然后查看進程號及其limit值,如下:


image.png

到這里問題就來了,為什么通過systemctl啟動的nginx對limit的設(shè)置不生效 ?????
然后查看了1號進程的limit值( cat /proc/1/limits ),發(fā)現(xiàn)也是對修改/etc/security/limits.conf文件里的最大文件打開數(shù)和最大進程數(shù)沒有生效

6:原因

仔細查看/etc/security/limits.conf文件的注釋,說明了對系統(tǒng)服務(wù)不生效


image.png

7:解決辦法

在Centos7系統(tǒng)中,使用Systemd替代了之前的SysV。/etc/security/limits.conf文件的配置作用域縮小了。/etc/security/limits.conf的配置,只適用于通過PAM認證登錄用戶的資源限制,它對systemd的service的資源限制不生效。因此登錄用戶的限制,通過/etc/security/limits.conf與/etc/security/limits.d下的文件設(shè)置即可。

對于systemd service的資源設(shè)置,則需修改全局配置,全局配置文件放在/etc/systemd/system.conf和/etc/systemd/user.conf,同時也會加載兩個對應(yīng)目錄中的所有.conf文件/etc/systemd/system.conf.d/.conf和/etc/systemd/user.conf.d/.conf。system.conf是系統(tǒng)實例使用的,user.conf是用戶實例使用的。

vim /etc/systemd/system.conf

DefaultLimitNOFILE=100000
DefaultLimitNPROC=65535

重啟后,systemctl start nginx啟動,然后根號進程號查看資源限制,得到


image.png

8:用到的相關(guān)命令

1)查看當前進程的最大可以打開的文件數(shù)

     cat /proc/進程ID/limits

2)查看當前進程實時打開的文件數(shù)

     lsof -p PID |wc -l

3)查看系統(tǒng)總限制打開文件的最大數(shù)量
cat /proc/sys/fs/file-max

注:若設(shè)置不生效,查看包含的目錄下的配置文件是否覆蓋,如/etc/security/limits.d/下的文件是否覆蓋了/etc/security/limits.conf設(shè)置的值

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容