Как я могу наблюдать за тем, что делает nginx? (для решения: «1024 worker_connections недостаточно»)

8

У меня сайт с очень низким трафиком, работающий на nginx, с 4 работниками, 1024 соединениями каждый.

Каждые несколько часов я начинаю видеть в журнале ошибок «1024 worker_connections недостаточно», и мой сайт замедляется / становится ненадежным. Перезапуск nginx полностью решает проблему в течение следующих нескольких часов.

Очевидно, что происходит что-то странное, я не могу обслуживать 4k одновременных пользователей моего приложения.

Кроме просмотра журнала доступа (который выглядит нормально), есть ли способ более детально наблюдать за тем, что делает nginx?

Существует ли какая-либо пресловутая комбинация конфигурации, которая может привести к тому, что старые соединения будут оставаться открытыми, а не закрытыми?

Спасибо.

редактировать это выглядит не правильно

# lsof |grep nginx |grep CLOSE_WAIT |wc -l
1271
Джон Башир
источник
ты используешь proxypass?
Дэн Р
Нет, я не использую никакой настройки прокси. Это рельсовый сайт на пассажира.
Джон Башир
1
Может быть, попробуйте nginx.org/en/docs/debugging_log.html , чтобы увидеть, с какими запросами это происходит. Я не знаком с пассажиром / рельсами. Если это порт для подключения к веб-клиентам, клиент закрыл соединение, но nginx не закрылся на его стороне.
Дан Р

Ответы:

7

Без прокси проход / обратный прокси

max_clients = worker_processes * worker_connections

С обратным прокси

max_clients = (worker_processes * worker_connections ) / (X * 2)

2 потому что вы открываете соединение с тем, что вы используете

X, однако, много одновременных соединений, которые эти клиенты устанавливают к вам

Чтобы увидеть, какие соединения висят вокруг, вы можете запустить lsof -i :PORT. Он покажет все соединения, открытые для nginx, и их состояние.

Дэн Р
источник
пробуя это… lsof 4.81 на Ubuntu… «персонаж с нелегальным вариантом: I»
Джон Башир
см. вывод lsof в редактировании выше
Джон Башир
1
не хотел использовать заглавную букву -i
Дэн Р