在部署新的服務經常會遇到打開最大文件數限制 too many open files 的警告,通常我們只需要修改/etc/security/limits.conf該文件,增加兩行,重新登錄下用戶即可解決,limits.conf 文件如下:
1、limits.conf 文件
vim /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535
注意:還有 /etc/security/limits.d/90-nproc.conf 文件,二者不要沖突。
2、重啟不生效問題
當 /etc/security/limits.conf 修改后,如果重啟主機都沒有生效,就要從以下幾個點進行排查了:
-
1、檢查/etc/ssh/sshd_config 中
UsePAM yes
選項是否開啟。解釋1:UsePAM yes
選項開啟后,表示啟用pam模塊,在/etc/pam.d/sshd中默認已存在一項session include password-auth
配置,include
表示需要通過password-auth
模塊認證。 -
2、檢查/etc/pam.d/system-auth 中是否存在
session required pam_limits.so
這一項。 解釋2:在/etc/pam.d/system-auth里還應該存在session required pam_limits.so
這一項,表示使用/etc/security/limits.conf這個配置 -
3、檢查/etc/pam.d/login 中是否將pam_limits.so文件被加入到啟動文件中存在
session required /lib64/security/pam_limits.so
這一項。解釋3:要讓limits.conf文件配置能夠生效,必須將pam_limits.so模塊文件加入到啟動文件中,故應在/etc/pam.d/login配置文件中添加session required /lib64/security/pam_limits.so
這一項
排查后重新登錄一下用戶就可以生效了,如果還未生效就要逐個排查/etc/pam.d下相關連的文件是否將session required pam_limits.so
這一下項注釋或刪除了
3、操作系統參數
另外影響最大打開文件句柄數量的還有/etc/sysctl.conf文件的配置:
fs.file-max = 102400 #內核可分配的最大文件數
fs.nr_open = 1048576 #單個進程可分配的最大文件數
fs.inotify.max_user_instances = 65535 #每個用戶最大可創建inotify instances數量
fs.inotify.max_user_watches = 102400 #每個用戶可同時添加的watch數量