Nginx с ошибкой лака: сбой (24: слишком много открытых файлов)

Я использую лак с nginx в качестве прокси-сервера на Ubuntu и получаю сообщение об ошибке (24: слишком много открытых файлов) каждые несколько дней. Перезапуск nginx решает проблему. Изучив эту ошибку, я обнаружил, что обычное решение — увеличить worker_rlimit_nofile в nginx.conf. Я чувствую, что это не настоящее решение, поскольку предел, который я установлю, также может достичь.

Почему nginx держит эти файлы (я полагаю, что это сокеты) открытыми? и какой будет выход из моей ситуации?

ОБНОВИТЬ:

Я только что заметил, что при запуске lsof открываются сотни лаковых сокетов. Я считаю, что моя проблема в том, что эти сокеты не закрываются.


person guyyug    schedule 10.10.2016    source источник


Ответы (1)


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

Я думаю, что количество открытых файлов по умолчанию составляет 1024, что слишком мало для лака.

Я устанавливаю его на 131072

ulimit -n 131072

person Benjamin Baumann    schedule 10.10.2016
comment
Спасибо Бенджамин. Я задавался вопросом, почему эти розетки остаются открытыми. Несколько дней назад я прекратил передавать трафик на сервер лака, но все еще вижу, что эти сокеты открыты, и получаю ту же ошибку (24: слишком много открытых файлов). - person guyyug; 11.10.2016
comment
Я не разработчик лака, но я думаю, что каждый поток лака управляет сокетом, а поскольку лак порождает много потоков (без вреда, он оптимизирован), ему нужно много сокетов. Если вы посмотрите на конфигурацию сервиса лака, вы должны где-то увидеть # Open files (usually 1024, which is way too small for varnish) ulimit -n ${NFILES:-131072} - person Benjamin Baumann; 11.10.2016