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

Maxim Dounin mdounin на mdounin.ru
Ср Ноя 14 12:59:10 UTC 2018


Hello!

On Wed, Nov 14, 2018 at 11:45:03AM +0300, kpoxa wrote:

> Сокеты в основном в stream, поэтому их агрегировать не получится, как я
> понимаю, с  http то проблем нет.

При наличии в конфиге listen-сокетов на wildcard-адресе и на 
конкретном ip-адресе - nginx будет использовать общий listen-сокет 
на wildcard-адресе, иначе на Linux'е просто нельзя работать.  Это 
работает как для http, так и для stream/mail.  Проблемы будут, 
только если один и тот же порт пытаться использовать в разных 
модулях.

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

При перезагрузке конфигурации в случае ошибок nginx откатывается 
на старую конфигурацию, так что простой даже при невалидной 
конфиге - возможен только в случае, если сервер в таком состоянии 
перезагрузили, либо же зачем-то вместо reload'а сделали restart.

> Основная проблема в долгом syscall bind, который долгий при определенных
> обстоятельствах. И почему он долгий не понятно.
> в strace видно время вызовов и видно, что для бинда по 443 порту оно в
> сотни раз дольше, чем для других портов.

Как раз почему он долгий - вполне понятно.  В ядре делается обход 
всех сокетов на 443 порту, чтобы узнать, можно ли сделать bind() 
на этот сокет, или открыты какие-то конфликтующие сокеты.  
Соответственно, где сокетов больше - там syscall дольше.

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


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