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

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

對於普通用戶或者進程經過/etc/security/limits.conf和/etc/security/limits.d/*.conf進行管理。或者經過ulimit 命令進行設置,但經過ulimit設置只對當前shell啓動的進程有效。二者的設置生效範圍和設置時機不一樣,詳見三 操做系統limits.conf生效機制。vim

  Redhat 7 之後對Systemd啓動的服務的最大句柄數經過/etc/systemd/system.conf和/etc/systemd/user.conf進行管理。操作系統

一 、操做系統全局設置3d

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

 

 

 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,因此相同配置後面會覆蓋前面。資源

 

 

以上參數設置的關係it

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數。

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

相關文章
相關標籤/搜索