Linux

增加 FD 限制然後 SSH 不起作用?

  • April 12, 2013

我正在使用 CentOS 6.3 64 位,並且在增加 FD 限制時遇到問題:更改限制後 SSH 無法正常工作,每次我登錄我的伺服器,輸入密碼後,然後“連接被遠端伺服器關閉”。

它是一個沒有任何“救援模式”的遠端伺服器,因此無法進行本地登錄以獲取任何錯誤日誌。在此問題發生之前,我也嘗試了 ulimit -SHn,但效果不佳。

現在,每次發生此問題時,我都必須恢復快照,但仍然不知道我的伺服器出了什麼問題。

由於我正在使用每秒處理數百萬個請求的高性能伺服器,因此我需要非常高的 FD 限制,這是我的配置:

/etc/security/limits.conf
* hard nofile 2000000
* soft nofile 2000000


/etc/security/limits.d/90-nproc.conf  
*          soft    nproc     1024


/etc/ssh/sshd_config
Protocol 2
SyslogFacility AUTHPRIV
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
X11Forwarding yes
Subsystem       sftp    /usr/libexec/openssh/sftp-server


/etc/pam.d/sshd
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    required     pam_limits.so   


/etc/sysctl.conf
fs.file-max = 2000000
fs.nr_open = 2000000 

最後,我找到了一種無需修改核心原始碼即可克服 2^20 限制的方法:

/etc/sysctl.conf

fs.nr_open = 10485760

修改fs.nr_open超過 2^20 可以解決這個問題。

此外,2^20 的限制並不是世界末日。我認識的一個人已經成功地建構了一個非常接近這個限制的 CentOS 伺服器,他的記錄是1025216現在。如果他使用正確配置的更高記憶體,毫無疑問他可以輕鬆克服這個限制。

這是他所做的(中文寫的,但你可以看到他的配置):

http://www.blogjava.net/yongboy/archive/2013/04/09/397559.html http://www.blogjava.net/yongboy/archive/2013/04/11/397677.html http://www.blogjava.net/yongboy/archive/2013/04/10/397631.html http://www.blogjava.net/yongboy/archive/2013/04/09/397594.html

2^20(大約一百萬)是 Linux 支持的最大文件描述符限制 ( NR_OPEN)。需要進行許多更改,包括重新編譯核心,才能提升它。它還會破壞許多依賴低限制的使用者空間應用程序。

我懷疑你完全是在吠叫錯誤的樹。請求率和所需的文件描述符數量之間沒有相關性。

引用自:https://serverfault.com/questions/497542