Re: Не понимаю в чем причина кода ответа 504 с ошибкой Connection timed out
Maxim Dounin
mdounin на mdounin.ru
Чт Июн 15 20:44:14 UTC 2017
Hello!
On Thu, Jun 15, 2017 at 09:38:08PM +0300, Алексанр Платонов wrote:
> > При connect-таймауте в 300 миллисекунд любой потерянный пакет
> > будет приводить к таймауту. А какой-то процент потерянных пакетов - это
> > нормальное состояние любой сети, так что нет причин удивляться
> > тому, что часть соединений при таких настройках таймаутится.
>
> Да, какая-то часть таймаутиться будет, это нормально. Я ожидал другого
> времени в логе +- 300мс.
> Если таймаут поднять и умрет ДЦ, то 1/3 запросов в api будет с сильно
> увеличенным временем ответа, а это приведет к тормозам всего сервиса.
> Локально обрабатывать трафик - железо разное.
> Завтра подниму до 700, посмотрим на результат.
Время в логе - следствие ровно того же самого, время обновляется
единожды за итерацию. Если таймаут 300 миллисекунд, а время 677 -
значит, в течении "лишних" 377 миллисекунд nginx был занят
обработкой других запросов в рамках одной итерации цикла обработки
событий.
> > Кроме того, следует понимать, что время внутри nginx'а обновляется
> > единожды за итерацию цикла обработки событий. В результате если
> > обработка какого-то события занимает существенное время и/или
> > таких событий много, это может сказаться как на latency операций в
> > целом, так и на точности работы отдельных таймаутов. Поскольку
> > 300 миллисекунд - время достаточно малое, это может быть заметно,
> > если сервер сильно нагружен и/или где-то блокируется.
>
> Сейчас ~ 150 rps на хост, машина не нагружена более чем на 40%. ~ в каких
> временных пределах может быть погрешность?
Вопрос в первую очередь в том, на сколько nginx блокируется в
рамках обработки запросов. Это может зависить от многих факторов,
обычно - наболее критичны блокировки на дисках, ибо по умолчанию
дисковые операции блокируются, а типичное время выполнения любой
операции на обычных дисках - порядка 10 миллисекунд даже
практически без нагрузки (ибо seek).
За какое время отрабатывает одна итерация цикла обработки
соединений - можно грубо оценить по debug log'у, смотреть строки
"timer delta". Там выводится время с начала предыдущей итерации,
для нагруженного сервера - это фактически время выполнения всей
предыдущей итерации.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru