LINUX.ORG.RU

Как понять на чем тормозит nginx?

 , ,


1

6

Ситуация такая. Докер, из него торчит порт, нжиникс заворачивает запросы на этот порт. Так вот прямой запрос в докер работает на 400 мс быстрее чем запрос через нжиникс.

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

Как понять что является причиной тормозов?

Апдейт. Тормозит ссл, поглядел число пакетов на хендшейке и длину пинга, помножил одно на другое - как раз время задержки.

★★★★★

Для начала запиши трафик между nginx-ом и бакендом внутри докера tcpdump -s0 -w dump.pcap -i any port $YOUR_PORT.

Затем посмотри на тайминги пакетов в wireshark. Очень похоже на самопальную реализацию HTTP, где присутствует несколько write-ов, в результате при keep-alive между nginx и демоном включается алгоритм Нейгла и появляется задержка (правда ее значение порядка 200 мс).

kawaii_neko ★★★ ()
Ответ на: комментарий от router

Спасиба!

Итак оказалось что накладные расходы дает ссл. Я это конечно предполагал что ссл вносит задержку, но не думал что ТАКУЮ.

Вопрос теперь что мне с этим делать? Как-то неуютно когда ответ формируется за 15 мс а клиент получает 200 + 200 = 400 мс сверху только на крипте.

ya-betmen ★★★★★ ()
Ответ на: комментарий от ya-betmen

Классика жанра. Если сеть твоя и доверенная, между прокси и веб-сервером голый http или ajp

Если сеть не доверенная...

Пусть nginx держит коннекты к upstream'у

И ещё гугли в сторону dh_param. Обычно реверс-прокси кэширует информацию о том, какие протоколы он _уже_ согласовал с клиентом, чтобы в следующий раз установить соединение быстрее. Скорее всего, это должно работать и в обратную сторону - твой веб-сервре в контейнере должен кэшировать информацию о tls. Возможно, на установку соединения будет тратиться меньше времени

router ★★★★★ ()
Ответ на: комментарий от router

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

Я только не понимаю чего оно такое медленное, пытаюсь понять работает ли аппаратная поддержка.

ya-betmen ★★★★★ ()