Чому 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.

Відповіді:


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.


Це було все! Дуже дякую. Здається, що перехід від Ubuntu 2012.04 LTS до Ubuntu 2014.04 LTS.
esilver

Радий, що тобі допомогло. Дійсно, мій xubuntu 14.04 не має цієї лінії в /etc/pam.d/sudo. Неможливо перевірити 12.04 зараз.
Наверн

При використанні systemd на Debian дивіться сервер defaultfault.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"

1

А також збільшення ліміту відкритого файлу. Вам потрібно збільшити максимальну кількість ваших 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 під час завантаження, f.ex через Upstart, ви можете встановити цей ліміт за допомогою строфи "limit".

Отже, для nofile:

limit nofile 4096 4096

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.