linux redhat7.x對於ulimit的管理


問題描述:RedHat 7.4設置系統最大文件打開數(open files)的時候,對系統啟動的進程不生效。

實際問題:程序需要將系統打開最大文件數的限制修改為100000,自己手動通過ulimit - n 100000命令設置,但是未生效。

問題分析:RedHat 7.0以上的系統設置需要修改配置文件,Redhat 7.0以下的系統則不存在該問題。

 

1:記錄未修改之前的ulimit值
 
 
 
2:修改配置文件
  
vim  /etc/security/limits.conf   在后面添加
*      soft    nofile  100000
*      hard    nofile  100000
*      soft    nproc   65535
*      hard    nproc   65535

 

重啟機器,修改 /etc/security/limits.conf 里的配置后,需重啟機器才能生效
      
 
3:查看修改后的ulimit值
 
 
  
4:在這里看起來一切都很正常,也許一不小心就入坑了。為了對比現象,需要安裝兩個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:現象
 
1)先啟動源碼編譯的nginx,並查看進程號及limit值,如下
 
啟動nginx:   /usr/local/nginx/sbin/nginx
查看進程:     ps -ef |grep nginx
查看某個進程的limit值: cat /proc/進程號/limits
     
 
 
2)yum安裝nginx啟動
 
啟動方法:systemctl start nginx.service ,然后查看進程號及其limit值,如下:
             
 
 
到這里問題就來了,為什么通過systemctl啟動的nginx對limit的設置不生效 ?????
然后查看了1號進程的limit值( cat /proc/1/limits ),發現也是對修改/etc/security/limits.conf文件里的最大文件打開數和最大進程數沒有生效
 
6:原因
 
仔細查看/etc/security/limits.conf文件的注釋,說明了對系統服務不生效
 
 
7:解決辦法
 
在Centos7系統中,使用Systemd替代了之前的SysV。/etc/security/limits.conf文件的配置作用域縮小了。/etc/security/limits.conf的配置,只適用於通過PAM認證登錄用戶的資源限制,它對systemd的service的資源限制不生效。因此登錄用戶的限制,通過/etc/security/limits.conf與/etc/security/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是用戶實例使用的。
 
vim /etc/systemd/system.conf
DefaultLimitNOFILE=100000
DefaultLimitNPROC=65535

 

重啟后,systemctl start nginx啟動,然后根號進程號查看資源限制,得到
 
 
8:用到的相關命令
    
1)查看當前進程的最大可以打開的文件數
 
     cat /proc/進程ID/limits
 
2)查看當前進程實時打開的文件數
 
     lsof -p PID |wc -l
 
3)查看系統總限制打開文件的最大數量
 
     cat /proc/sys/fs/file-max
 
注:若設置不生效,查看包含的目錄下的配置文件是否覆蓋,如/etc/security/limits.d/下的文件是否覆蓋了/etc/security/limits.conf設置的值 。
 
心得:在這里奉勸大家和自己,當在Linux上操作某些命令或者修改某些配置文件的時候,無論自己在以前的版本多么熟悉,當新版本的Linux修改配置文件不生效時,一定要去man,或者查看修改的文件的注釋或者說明,系統開發者不會無緣無故放一段注意在文件里的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM