В 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 (который также перезапустит все ваши нерешенные задания), и вы заметите, что лимиты действительно были увеличены.
Спасибо!
Если у вас не перезапускается сервис, то в minfds=1024; уберите точку с запятой minfds=1024 (в частности в debian 11)
Спасибо за дополнение!