Почему redis сообщает об ограничении в 1024 файла даже после обновления файла limit.conf?

9

Я вижу эту ошибку в верхней части моего файла redis.log:

В настоящее время максимальное количество открытых файлов составляет 1024. maxclients было уменьшено до 4064, чтобы компенсировать низкий уровень ulimit.

Я следовал за этими шагами к письму (и перезагрузил):

Более того, я вижу это, когда я бегу ulimit:

ubuntu@ip-XX-XXX-XXX-XXX:~$ ulimit -n
65535

Является ли эта ошибка показной? Если нет, какие еще шаги мне нужно выполнить? Я запускаю Redis 2.8.13 (верхушка дерева) на Ubuntu LTS 14.04.1 (опять же, верхушка дерева).

Вот информация о пользователе:

ubuntu@ip-XX-XXX-XXX-XXX:~$ ps aux | grep redis
root      1027  0.0  0.0  66328  2112 ?        Ss   20:30   0:00 sudo -u ubuntu /usr/local/bin/redis-server /etc/redis/redis.conf
ubuntu    1107 19.2 48.8 7629152 7531552 ?     Sl   20:30   2:21 /usr/local/bin/redis-server *:6379               

Поэтому сервер работает как Ubuntu.

Вот мой файл limit.conf без комментариев:

ubuntu@ip-XX-XXX-XXX-XXX:~$ cat /etc/security/limits.conf | sed '/^#/d;/^$/d'
ubuntu soft nofile 65535
ubuntu hard nofile 65535
root soft nofile 65535
root hard nofile 65535

И вот вывод sysctl fs.file-max:

ubuntu@ip-XX-XXX-XXX-XXX:~$ sysctl -a| grep fs.file-max
sysctl: permission denied on key 'fs.protected_hardlinks'
sysctl: permission denied on key 'fs.protected_symlinks'
fs.file-max = 1528687
sysctl: permission denied on key 'kernel.cad_pid'
sysctl: permission denied on key 'kernel.usermodehelper.bset'
sysctl: permission denied on key 'kernel.usermodehelper.inheritable'
sysctl: permission denied on key 'net.ipv4.tcp_fastopen_key'

как судо

ubuntu@ip-10-102-154-226:~$ sudo sysctl -a| grep fs.file-max
fs.file-max = 1528687

Кроме того, я вижу эту ошибку в верхней части файла redis.log, не уверен, что это связано. Имеет смысл, что пользователь Ubuntu не может изменять максимальное количество открытых файлов, но, учитывая высокие лимиты, которые я пытался установить, ему не нужно:

[1050] 23 Aug 21:00:43.572 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
[1050] 23 Aug 21:00:43.572 # Redis can't set maximum open files to 10032 because of OS error: Operation not permitted.
esilver
источник

Ответы:

4

Вы должны отредактировать ваши файлы внутри /etc/pam.d/каталога.

В вашем случае, когда вы запускаете sudo -u ubuntu /usr/local/bin/redis-server, вы должны добавить следующую строку в /etc/pam.d/sudoили, /etc/pam.d/common-session-noninteractiveесли /etc/pam.d/sudoвключает эту:

session required pam_limits.so

Это должно помочь в настройке конфигурации, представленной внутри /etc/security/limits.conf.

Navern
источник
Вот и все! Спасибо. Похоже на переход с Ubuntu 2012.04 LTS на Ubuntu 2014.04 LTS.
Esilver
Рад, что помог тебе. Действительно, мой xubuntu 14.04 не имеет этой строки в /etc/pam.d/sudo. Не могу проверить 12.04 прямо сейчас.
Заверн
При использовании systemd в Debian см. Serverfault.com/questions/770037/…
tholu
3

Еще одно предложение для пользователей, нашедших этот пост, чья проблема не связана с pam_limits.so. В моем случае Redis запускался через супервизор. В этом случае метод, которым супервизор переключал пользовательские контексты, вызывал запуск нового сеанса с системными ограничениями по умолчанию, а не теми, которые я настроил для пользователя.

Решение в этом случае было найдено здесь . Суть в том, что вам нужно определить предел через ulimit -n как часть команды запуска в supervisord.

Пример:

[program:redis-a]
command=bash -c "ulimit -n 32768; exec /usr/local/bin/redis-server /etc/redis/a.conf"
modea
источник
1

А также увеличение лимита открытых файлов. Вам нужно увеличить maxclients в вашем redis.conf. Это только 10000 по умолчанию.

# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
maxclients 1024000
Карима
источник
0

Примечание для других пользователей Ubuntu с похожей проблемой:

Если вы запускаете Redis при загрузке, например, через Upstart, вы можете установить этот лимит в разделе «limit».

Итак, для нофиле:

limit nofile 4096 4096

DarkNeuron
источник