-2

我正在使用 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 
4

1 回答 1

1

2^20 是绝对极限。至少您必须更改NR_OPEN.linux/fs.h

#define NR_OPEN (1024*1024) /* Absolute upper limit on fd num */

我不建议将limit.conf价值提高到高于你必须的水平。许多程序试图关闭它们可能打开的每个文件描述符,尤其是在调用exec. 他们会循环很长时间来关闭未打开的描述符。

于 2013-04-09T08:17:55.523 回答