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