修改RedHat 7.2 進程最大句柄數限制


RedHat對進程打開文件句柄數主要通過設置全局值和登陸用戶分別管理。其中/proc/sys/fs下設置全局最大文件句柄數和用戶進程能打開的最大文件句柄數,這兩個參數一般情況下不需要修改。

對於普通用戶或者進程通過/etc/security/limits.conf和/etc/security/limits.d/*.conf進行管理。或者通過ulimit 命令進行設置,但通過ulimit設置只對當前shell啟動的進程有效。兩者的設置生效范圍和設置時機不同,詳見三 操作系統limits.conf生效機制。

  Redhat 7 以后對Systemd啟動的服務的最大句柄數通過/etc/systemd/system.conf和/etc/systemd/user.conf進行管理。

一 、操作系統全局設置

1.查看系統的初始設置,默認為1024*1024=1048576

 

 

 2.查看/etc/sysctl.conf和/etc/sysctl.con./*.conf的設置,如果需要修改sysctl.conf,則修改后須執行sysctl –p使修改生效。

 

 3.查看/etc/security/limits.conf 以及/etc/security/limits.d/*.conf 。操作系統默認先加載limits.conf后加載limits.d/*.conf,所以相同配置后面會覆蓋前面。

 

 

以上參數設置的關系

a)         所有進程打開的文件描述符數不能超過/proc/sys/fs/file-max

b)         單個進程打開的文件描述符數不能超過user limit中nofile的soft limit

c)         nofile的soft limit不能超過其hard limit

d)         nofile的hard limit不能超過/proc/sys/fs/nr_open

注:soft limit表示對當前用戶生效的值,用戶可以通過命令或者腳本進行修改,但是不能超過hard limit。而hard limit 只用root才能修改,且不能超過nr_open數。

二、 對Systemd啟動程序的設置

    Red Hat 7使用Systemd代替了SysV,因此systemd啟動的服務使用配置文件/etc/systemd/system.conf和/etc/systemd/user.conf進行管理,不受limits.conf限制。如果存在/etc/system/system.conf.d/*.conf 則同樣會覆蓋system.conf相同配置項。修改該配置文件后重啟系統后生效。主要使用以下兩個選項進行限制:

DefaultLimitNOFILE #限制systemd啟動進程打開文件數

DefaultLimitNPROC #限制systemd 創建進程數

 系統限制

 

 

普通用戶

 

 systemctl啟動的單個服務如何修改打開句柄數:

 1.通過命令查看服務對應的配置文件:

 systemctl status example.service

 

 2.編輯對應的配置文件,添加如下內容:

 vim /usr/lib/systemd/system/example.service

 

3.通過以下命令使配置生效

sudo systemctl deamon-reload

三 、操作系統limis.conf生效機制

  ulimit –a顯示如下,其中-n后面的為進程可以打開的最大文件句柄數。其他值為系統默認值。通過ulimit  -n設置的值只限制當前shell啟動進程可以打開的文件句柄數。

 

          Linux對用戶使用資源的限制通過PAM對登陸用戶進行身份驗證並設置相應的限制。

 具體順序如下。從用戶登陸開始,操作系統會依次執行如下三部

  1. /etc/pam.d/login

  2. /etc/pam.d/system-auth

  3. /lib64/security/pam_limits.so

 

 具體內容如下:

1.在/etc/pam.d/login 中調用system-auth

 

 

  2. 在/etc/pam.d/system-auth 調用pam_limits.so

  

 

3. 通過grep查看/lib64/security/pam_limits.so 可以看到limits.conf和limits.d/*.conf

 

 

4.在rc.local中設置ulimit -n 6635是否可以呢?

  先說答案,可能不行。主要是操作系統加載順序導致的,操作系統在啟動時加載rc.local,然后在用戶登陸時執行 limits.conf,最后在設置用戶環境變量時執行/etc/profile 。因此后面的limits.conf和/etc/profile 中的 ulimit 命令設置均可能覆蓋以前的設置。 

四 結論

每次用戶登錄時會先加載/etc/security/limits.conf 以及/etc/security/limits.d/*.conf的配置,再執行/etc/profile 中的設置,因此在更改進程打開最大文件句柄數限制時有兩種方案:

1.按格式修改/etc/security/limits.conf,重新登陸使limits.conf生效,然后再啟動服務程序;

2.在/etc/profile 添加ulimit –n 65535 設置,重新登陸或者執行source /etc/profile命令,然后啟動服務程序;

 

針對設置了免密登陸的情況,由於沒有了了用戶登陸驗證過程,所以不會加載limits.conf文件,因此建議通過/etc/profile 中添加ulimit –n 65535命令設置,然后在啟動服務程序之前執行source命令使該設置生效。


免責聲明!

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



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