Re: Таймауты proxy pass
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
Добрый день! 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
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
Добрый день. В продолжение изучения проблемы обнаружили что в логе нжинкса 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
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
пара моментов 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
У нас есть одна площадка, нжинкс принимает запросы и проксирует на бэкенд через 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