1. 程式人生 > >修改RedHat 7.2 進程最大句柄數限制

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

生效 max rep source red hat 登陸 nbsp pam 執行

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

二、 對Systemd啟動程序的設置

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

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

DefaultLimitNPROC #限制systemd 創建進程數

系統限制

技術分享圖片

普通用戶

技術分享圖片

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

技術分享圖片

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

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命令使該設置生效。

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