Увеличьте количество открытых файлов для заданий, управляемых supervisord |

Увеличьте количество открытых файлов для заданий, управляемых supervisord

Мануал

В Linux непривилегированный пользователь по умолчанию может открывать только 1024 файла на машине.

Это включает в себя файлы журнала, и также локальные сокеты, порты TCP, … все файлы и использование ограничены, как элемент системной защиты.

Обычно мы можем увеличить количество процессов, которые может открыть конкретный пользователь, увеличив системные ограничения.

Это настроено в файле /etc/security/limits.d/.

Например, это позволяет пользователю john открыть до 10.000 файлов.

$ cat /etc/security/limits.d/john.conf
john		soft		nofile		10000

Вы могли бы предположить, что после его настройки это применимо ко всем командам, выполняемым как пользователь john.

Увы, это не тот случай, если вы используете supervisord для запуска процесса.

Возьмите, например, следующее задание супервизора:

$ cat /etc/supervisord.d/john.ini
[john]
command=/usr/bin/php /path/to/script.php
numprocs=1
autostart=true
autorestart=true
user=john

Это добавило бы job супервизору, чтобы всегда держать задачу /usr/bin/php/path/to/script.php запущенной от пользователя john, и если должен был произойти сбой или остановка, она автоматически перезапустила бы ее.

Однако, если мы будем проверять фактические ограничения, применяемые в этом процессе, мы найдем следующее.

$ cat /proc/19153/limits
Limit                     Soft Limit           Hard Limit           Units
...
Max open files            1024                 4096                 files

Процесс имеет софт предел в 1024 файла и жесткий предел 4096, несмотря на увеличение количества файлов, которые он может открыть в нашем каталоге limits.d.

Причина в том, что у supervisord есть свой собственный, minfds, который он использует, чтобы установить количество файлов, которые он может открыть.

И эта настройка унаследована всеми дочерними процессами, которые появляются у супервизора, поэтому она отменяет любые настройки, которые вы можете установить в limits.d.

Его значение по умолчанию установлено на 1024 и может быть увеличено так, как вам нужно

$ cat /etc/supervisord.conf
[supervisord]
...
minfds=1024;

Вы найдете этот файл в /etc/supervisor/supervisord.conf в системах Debian или Ubuntu.

Либо добавьте, либо измените параметр minfds, перезапустите supervisord (который также перезапустит все ваши нерешенные задания), и вы заметите, что лимиты действительно были увеличены.

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий

  1. Аноним

    Спасибо!
    Если у вас не перезапускается сервис, то в minfds=1024; уберите точку с запятой minfds=1024 (в частности в debian 11)

    Ответить
    1. cryptoparty автор

      Спасибо за дополнение!

      Ответить