Re: Пролагивание коннектов при проверке синтаксиса

Maxim Dounin mdounin на mdounin.ru
Вт Ноя 13 18:58:22 UTC 2018


Hello!

On Tue, Nov 13, 2018 at 08:23:03PM +0300, kpoxa wrote:

> Добрый день.
> 
> Есть сервер (Dual Xeon E5620, средняя нагрузка проца в праймтайм 20%) с
> nginx в главной и по сути единственной роли, задача которого проксирование
> и больше ничего.
> 
> В конфиге 101 listen на уникальные ip:port, nginx без сторонних модулей.
> 1.15.4, но думаю что версия тут не при чем.
> Debian Linux Jessy с ядром 3.16.
> 
> В среднем одновременных коннектов открыто 150-200 тыс. 70% из них по 443
> порту.
> в логе собирается время отвремя апстрима и было замечено, то раз в 30
> секунд оно пролагивает у части коннектов на лишнюю секунду, т.е. обычно
> 0.01, а тут 1.01 сек.
> Выяснилось что раз в 30 секунд срабатывает проверка конфига заббиксом, т.е.
> вызывается
> nginx -t
> 
> Ручной вызов nginx -t привел к появлению в логах лагающих  запросов в это
> время, выключение аббикс агента такие запросы убирает вообще.
> команда
> time nginx -t
> nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
> nginx: configuration file /etc/nginx/nginx.conf test is successful
> real    0m0.601s
> user    0m0.044s
> sys     0m0.432s
> показывает 0.4 с лишним секунды в режиме ядра.
> а попытка разобраться чем же занято ядра выдало ниже следующее
> 
> strace -Ttt nginx -t 2>&1 | grep bind
> 
> т.е. bind на 443 порты занимает 15 тысячных секунды, против стотысячных
> долей у прочих биндов.
> 
> Есть ли идеи, как решить проблему пролагиваний при проверке конфига?
> Вариант убрать её из заббикса считаю академически неправильным, просьба его
> не рассматривать.
> 
> reuseport не используется, может он помочь?

Из общих соображений я бы скорее предположил, что reuseport в 
данной ситуации сделает хуже, а не лучше.  Потому что сокетов 
станет только больше, а bind() должен проверить конфликты с 
открытыми сокетами.

Очевидное решение - добавить listen на *:443, тогда listen-сокет 
будет один, и проблема исчезнет.

Впрочем, запускать "nginx -t" раз в 30 секунд - это, скажем так, 
очень странное решение, если не сказать грубее.  Особенно с учётом 
того, что только парсинг конфигурации вполне может занимать 
несколько минут.

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru