Я вижу эту ошибку в верхней части моего файла 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.
Вот мой файл limits.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'
как sudo
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.
Вы должны редактировать свои файлы внутри /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
.
Еще одно предложение для пользователей, которые нашли этот пост, проблема которого не связана с pam_limits.so. В моем случае Redis запускался через supervisord. В этом случае метод, с помощью которого супервизор переключил контексты пользователя, заставил новый сеанс запускаться с системными ограничениями по умолчанию, а не с теми, которые я настроил для пользователя.
Решение в этом случае было найдено Вот. Короче говоря, вам нужно определить ограничение с помощью ulimit -n как часть команды запуска в supervisord.
Пример:
[program:redis-a]
command=bash -c "ulimit -n 32768; exec /usr/local/bin/redis-server /etc/redis/a.conf"
А также увеличение лимита открытых файлов. Вам нужно увеличить 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
Примечание для других пользователей Ubuntu с аналогичной проблемой:
Если вы запускаете Redis при загрузке, например, через Upstart, вы можете установить это ограничение с помощью строфы «limit».
Итак, для nofile:
limit nofile 4096 4096