Re: Таймауты proxy pass

2020-03-27 Пенетрантность Maxim Dounin
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 mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Таймауты proxy pass

2020-03-27 Пенетрантность opan
Добрый день!

1. В данном случае мы видели содержимое и ответ умещался в один пакет
2. У нас есть метрики на самом бэкенде, где мы засекаем время ответа. в 90%
оно составляет меньше <1 мс, в то время как 90 персентиль по логам нжинкса
получается 45мс.

Не может нджинкс возвращать неправильный upstream_response_time?


On 3/25/20 7:09 PM, Evgeniy Berdnikov wrote:
> On Wed, Mar 25, 2020 at 09:48:10AM -0400, opan wrote:
>> Добрый день.
>>
>> В продолжение изучения проблемы обнаружили что в логе нжинкса
>> upstream_response_time - 41ms, а этот же запрос, если смотреть tcpdump,
>> время ответа бэка меньше 1ms:
>>
>>
https://www.dropbox.com/s/04falc2m073jnf5/Screenshot%202020-03-25%2016.38.15.png?dl=0
>>
>>
>> Как такое может быть?
>
>  Ответ апстрима не обязательно помещается в один пакет, даже если у него
>  установлен флаг PSH. Если бы отображалось содержимое пакетов, то можно
>  было бы проверить, передан ли ответ полностью, а при наличии в дампе
>  ответных ACKов -- утверждать, что ответ получен сервером.

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,287425,287480#msg-287480

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Таймауты proxy pass

2020-03-25 Пенетрантность Evgeniy Berdnikov
On Wed, Mar 25, 2020 at 09:48:10AM -0400, opan wrote:
> Добрый день.
> 
> В продолжение изучения проблемы обнаружили что в логе нжинкса
> upstream_response_time - 41ms, а этот же запрос, если смотреть tcpdump,
> время ответа бэка меньше 1ms:
> 
> https://www.dropbox.com/s/04falc2m073jnf5/Screenshot%202020-03-25%2016.38.15.png?dl=0
> 
> 
> Как такое может быть?

 Ответ апстрима не обязательно помещается в один пакет, даже если у него
 установлен флаг PSH. Если бы отображалось содержимое пакетов, то можно
 было бы проверить, передан ли ответ полностью, а при наличии в дампе
 ответных ACKов -- утверждать, что ответ получен сервером.
-- 
 Eugene Berdnikov
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Таймауты proxy pass

2020-03-25 Пенетрантность opan
Добрый день.

В продолжение изучения проблемы обнаружили что в логе нжинкса
upstream_response_time - 41ms, а этот же запрос, если смотреть tcpdump,
время ответа бэка меньше 1ms:

https://www.dropbox.com/s/04falc2m073jnf5/Screenshot%202020-03-25%2016.38.15.png?dl=0


Как такое может быть?


On 23.03.2020 14:35, Илья Шипицин wrote:
> пара моментов
>
> 1) у вас proxy_pass на https, по крайней мере первоначальный хендшейк
может быть долгим (например, если клиент захочет сделать OCSP проверку).
выглядит так, как будто у вас
> должен быть кипэлайв до бекенда, поэтому это соображение должно касаться
только редких запросов
>
> 2) возможно, у вас работает буферизация запросов-ответов. попробуйте
"proxy_buffering off;" и "proxy_request_buffering off;" ?
>
> пн, 23 мар. 2020 г. в 14:01, opan :
>
> У нас есть одна площадка, нжинкс принимает запросы и проксирует на
бэкенд
> через fcgi_pass. В логах нжинса мы видим upstream_response_time 40мс.
> Появилась вторая площадка, мы принимаем там трафик и отправляем все
на
> первую площадку через proxy_pass. Так же логируем здесь
> upstream_reponse_time и наблюдаем очень большие значения. Мы ожидали,
что
> добавится просто летенси между новой и старой площадкой, плюс
какие-то
> небольшие накладные расходы nginx. Но это не так, в
upstream_response_time
> мы видим 130-150мс ( в 3.5 раз больше, чем на площадке 1). При этом,
если
> замерять время запросов от клиента, то total_time курла примерно
одинаков
> для обоих площадок. Как такое может быть? Почему в логах
> upstream_reponse_time больше в 3-4 раза, а время ответа при этом
практически
> не меняется?
>
> Вот фрагмент конфигурации, в которой проксируем:
>
>  location = /ххх {
>
> proxy_cache off;
> proxy_redirect off;
> proxy_pass_request_body on;
> proxy_pass_request_headers on;
> proxy_next_upstream off;
> proxy_set_header Host $host;
> proxy_set_header X-Real-IP $remote_addr;
> proxy_pass https://second.domain/xxx;
> proxy_http_version 1.1;
> proxy_set_header Connection "";
>
> }
>
> Posted at Nginx Forum:
https://forum.nginx.org/read.php?21,287422,287422#msg-287422
>
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
>
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,287425,287456#msg-287456

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Таймауты proxy pass

2020-03-23 Пенетрантность opan
1. Про ssl верно, мы замеряли сколько времени занимает установка соединения.
Это 20-30мс, не больше.
2. Пробовали, не помогает 

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

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,287425,287428#msg-287428

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Таймауты proxy pass

2020-03-23 Пенетрантность Илья Шипицин
пара моментов

1) у вас proxy_pass на https, по крайней мере первоначальный хендшейк может
быть долгим (например, если клиент захочет сделать OCSP проверку). выглядит
так, как будто у вас
должен быть кипэлайв до бекенда, поэтому это соображение должно касаться
только редких запросов

2) возможно, у вас работает буферизация запросов-ответов. попробуйте
"proxy_buffering off;" и "proxy_request_buffering off;" ?

пн, 23 мар. 2020 г. в 14:01, opan :

> У нас есть одна площадка, нжинкс принимает запросы и проксирует на бэкенд
> через fcgi_pass. В логах нжинса мы видим upstream_response_time 40мс.
> Появилась вторая площадка, мы принимаем там трафик и отправляем все на
> первую площадку через proxy_pass. Так же логируем здесь
> upstream_reponse_time и наблюдаем очень большие значения. Мы ожидали, что
> добавится просто летенси между новой и старой площадкой, плюс какие-то
> небольшие накладные расходы nginx. Но это не так, в upstream_response_time
> мы видим 130-150мс ( в 3.5 раз больше, чем на площадке 1). При этом, если
> замерять время запросов от клиента, то total_time курла примерно одинаков
> для обоих площадок. Как такое может быть? Почему в логах
> upstream_reponse_time больше в 3-4 раза, а время ответа при этом
> практически
> не меняется?
>
> Вот фрагмент конфигурации, в которой проксируем:
>
>  location = /ххх {
>
> proxy_cache off;
> proxy_redirect off;
> proxy_pass_request_body on;
> proxy_pass_request_headers on;
> proxy_next_upstream off;
> proxy_set_header Host $host;
> proxy_set_header X-Real-IP $remote_addr;
> proxy_pass https://second.domain/xxx;
> proxy_http_version 1.1;
> proxy_set_header Connection "";
>
> }
>
> Posted at Nginx Forum:
> https://forum.nginx.org/read.php?21,287422,287422#msg-287422
>
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Таймауты proxy pass

2020-03-23 Пенетрантность opan
У нас есть одна площадка, нжинкс принимает запросы и проксирует на бэкенд
через fcgi_pass. В логах нжинса мы видим upstream_response_time 40мс. 
Появилась вторая площадка, мы принимаем там трафик и отправляем все на
первую площадку через proxy_pass. Так же логируем здесь
upstream_reponse_time и наблюдаем очень большие значения. Мы ожидали, что
добавится просто летенси между новой и старой площадкой, плюс какие-то
небольшие накладные расходы nginx. Но это не так, в upstream_response_time
мы видим 130-150мс ( в 3.5 раз больше, чем на площадке 1). При этом, если
замерять время запросов от клиента, то total_time курла примерно одинаков
для обоих площадок. Как такое может быть? Почему в логах
upstream_reponse_time больше в 3-4 раза, а время ответа при этом практически
не меняется?

Вот фрагмент конфигурации, в которой проксируем:

 location = /ххх {
   
proxy_cache off;
proxy_redirect off;
proxy_pass_request_body on;
proxy_pass_request_headers on;
proxy_next_upstream off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass https://second.domain/xxx;
proxy_http_version 1.1;
proxy_set_header Connection "";

}

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,287422,287422#msg-287422

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru