Re: Таймауты proxy pass
Maxim Dounin
mdounin на mdounin.ru
Пт Мар 27 12:49:56 UTC 2020
Hello!
On Fri, Mar 27, 2020 at 08:18:10AM -0400, opan wrote:
> Добрый день!
>
> 1. В данном случае мы видели содержимое и ответ умещался в один пакет
> 2. У нас есть метрики на самом бэкенде, где мы засекаем время ответа. в 90%
> оно составляет меньше <1 мс, в то время как 90 персентиль по логам нжинкса
> получается 45мс.
>
> Не может нджинкс возвращать неправильный upstream_response_time?
Тут важно понимать, что:
1. $upstream_response_time включает в себя не только получение
ответа, но и отправку запроса, а также установление соединения
(а равно резолвинг адресов, если он используется, и SSL handshake,
если используется SSL).
2. В зависимости от конкретной формы ответа - окончание ответа
может индицироваться закрытием соединения, и даже если кажется,
что весь ответ "влез" в один пакет - это может быть не так, ибо
ответ не закончен, пока не пришёл FIN. А FIN может придти совсем
в другое время.
3. Время получения пакетов tcpdump'ом и время, когда когда эти
пакеты сможет обработать приложение - это два разных времени, и
они могут кардинально различаться, если сервер сильно загружен.
4. В одном рабочем процессе nginx'а обрабатывается множество
соединений, так что если в том же рабочем процессе
происходит что-то ещё тяжёлое (а особенно - если что-то
блокирующееся, несмотря на явные рекомендации так не делать) - до
конкретного соединения дело может доходить с заметной задержкой.
5. Время в nginx'е обновляется один раз за цикл обработки
соединений, и если, опять же, в том же рабочем процессе происходит
что-то ещё тяжёлое - время может быть неточным, даже если
конкретному запросу повезло и обработка была быстрой.
Что конкретно происходит у вас - неизвестно, данных для анализа
недостаточно.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru