Увеличение ограничения FD, тогда SSH не работает?

Я использую CentOS 6.3 64bit, и у меня возникают проблемы с увеличением ограничения 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 ответа

Решение

Наконец, я нашел способ преодолеть ограничение 2^20 без изменения исходного кода ядра:

В /etc/sysctl.conf:

fs.nr_open = 10485760

изменять fs.nr_open более 2^20 может решить эту проблему.

Более того, предел 2^20 - это не конец света. Я знаю одного человека, который успешно построил сервер CentOS очень близко к этому пределу, его запись 1025216 теперь. Если он использует более высокий mem с правильной конфигурацией, он, несомненно, сможет легко преодолеть это ограничение.

Вот что он сделал (написано на китайском, но вы можете увидеть его конфигурацию):

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 (приблизительно один миллион) - максимальный предел дескриптора файла (NR_OPEN) это поддерживается в Linux. Чтобы поднять его, потребуется много изменений, включая перекомпиляцию ядра. Это также сломало бы множество приложений пользовательского пространства, которые полагаются на низкий лимит.

Я подозреваю, что вы полностью лаете не на то дерево. Нет корреляции между частотой запросов и количеством необходимых файловых дескрипторов.

Другие вопросы по тегам