我使用的是CentOS 6.3 64bit,并且在增加FD限制时遇到了问题:更改了限制后SSH不工作,每次login我的服务器,input密码后,然后“远程服务器closures连接”。
这是一个没有任何“救援模式”的远程服务器,所以没有办法做本地login来获取任何错误日志。 在这个问题发生之前,我也尝试了ulimit -SHn,但是还没有正常工作。
现在每次发生这个问题我都必须恢复快照,但仍然不知道服务器有什么问题。
由于我正在处理每秒处理数百万次请求的高性能服务器,因此我需要非常高的FD限制,这里是我的configuration:
/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(大约一百万)是Linux下支持的最大文件描述符限制( NR_OPEN )。 这将需要很多的改变,包括重新编译内核,以提高它。 它也将打破大量的依赖于极限的用户空间应用程序。
我怀疑你完全吠叫了错误的树。 请求率和所需文件描述符的数量之间没有关系。
最后,我find了一个方法来克服2 ^ 20限制,无需修改内核源代码:
在/etc/sysctl.conf :
fs.nr_open = 10485760
修改2 ^ 20的fs.nr_open可以解决这个问题。
而且,2 ^ 20的限制不是世界末日。 我知道有一个人成功地build立了一个非常接近这个限制的CentOS服务器,现在他的logging是1025216 。 如果他用正确的configuration使用更高的内存,毫无疑问,他可以很容易地克服这个限制。
这是他所做的(用中文写的,但你可以看到他的configuration):
http://www.blogjava.net/yongboy/archive/2013/04/09/397559.html http://www.blogjava.net/yongboy/archive/2013/04/11/397677.html http:// http://www.blogjava.net/yongboy/archive/2013/04/10/397631.html http://www.blogjava.net/yongboy/archive/2013/04/09/397594.html