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