Очередь Laravel с супервизором, открывающим слишком много файлов FIFO

Я выполняю задание очереди Laravel под названием «webhooks», используя beanstalkd и supervisord на моем сервере Ubuntu. Я вижу, что задание работает правильно с идентификатором процесса 4403:

webhooks                         RUNNING    pid 4403, uptime 4 days, 19:47:01

Как видите, эта работа выполняется уже 4 дня. В моих журналах ошибок я начал замечать следующую ошибку:

error:02001018:system library:fopen:Too many open files

Когда я побежал lsof | php чтобы увидеть, какие файлы были открыты, я заметил тонну открытых файлов, которые имели тип FIFO, Вот эксперт из вывода:

COMMAND     PID   TID       USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
php        4403             root    0r     FIFO                0,8      0t0    9215811 pipe
php        4403             root    1w     FIFO                0,8      0t0    9215812 pipe
php        4403             root    2w     FIFO                0,8      0t0    9215812 pipe
php        4403             root    3w     FIFO                0,8      0t0    9215812 pipe
php        4403             root    4w     FIFO                0,8      0t0    9215812 pipe
php        4403             root    8r     FIFO                0,8      0t0    9215811 pipe
php        4403             root    9r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   10r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   11r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   12r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   13r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   14r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   15r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   16r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   17r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   18r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   19r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   20r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   21r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   22r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   23r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   24r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   25r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   26r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   27r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   28r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   29r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   30r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   31r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   32r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   33r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   34r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   35r     FIFO                0,8      0t0    9215811 pipe
php        4403             root   36r     FIFO                0,8      0t0    9215811 pipe

Это всего лишь отрывок. На самом деле существует около 1200 таких FIFO файлы открыты.

Кто-нибудь знает, что вызывает создание файлов? Какой тип кода приведет к тому, что система откроет новый файл FIFO? Для чего используются эти файлы?

8

Решение

В итоге я увеличил лимит открытия файлов в моей системе, и это, похоже, решило проблему. Документы руководителя говорят, что:

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

После увеличения лимита открытия файлов до 10000 я перестал видеть ошибку. Я периодически проверяю количество открытых файлов FIFO, и иногда оно очень велико (в тысячах), а иногда гораздо меньше (в сотнях). Похоже, что супервизор постоянно открывает и закрывает эти файлы, и мне просто нужно было убедиться, что система позволяет супервизору достаточно места для своей работы.

Если кому-то интересно, я увеличил лимит файлов, добавив следующие две строки в конец /etc/security/limits.conf,

root             soft    nofile          10000
root             hard    nofile          10000

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]