(60: Operation timed out) while reading response header from upstream

urri nginx-forum на nginx.us
Чт Авг 11 00:44:43 UTC 2011


Добавили request_time (время обработки
запроса, от получения, до отправки
клиенту) в лог nginx.

368325 запросов из 389838 выполнились за 0.00X
секунд
17629 запросов из 389838 выполнились за 0.0X
секунд
2872 запросов из 389838 выполнились за 0.X
секунд

~ 300 запросов выполнялось 75 секунд
(время таймаута) и примерно столько же
записей в error.log (60: Operation timed out) while reading
response header from upstream.

Вот типичный таймаут, время выполнения
запроса 75.005, время когда таймаут был
зафиксирован 16:06:49:

95.95.95.95 - - [10/Aug/2011:16:06:49+0400] - 75.005 - "GET /XXX/YYY/
HTTP/1.1" 504 584

Время которое зафиксировал демон по
этому запросу, запрос пришел в 16:06:49 и
был обработан в эту же секунду:

2011.08.10 16:06:49 v[3] 	handler_input: id: 35071142
2011.08.10 16:06:49 v[3] 	handler: id: 35071142 ip: 95.95.95.95 uri:
/XXX/YYY/ 
2011.08.10 16:06:49 v[3]	handler_output: id: 35071142

То есть на пути nginx -> [( network -> libevent )] -> input
query было потеряно 75 секунд.

Я думаю это происходит из-за
недопонимания во взаимодействии по
протоколу HTTP, nginx отправляет запрос и
ждет ответ (response header), libevent получает
запрос, но думает что запрос получен не
полностью и продолжает ждать
оставшуюся часть, и только когда nginx
закрывает соединение по таймауту libevent
отправляет запрос на обработку к
демону.

Вот пример access лога по одну из ИП
который получил таймаут, 10 запросов
менее 1 секунды и 2 по 75 секунд.

96.96.96.96 - - [10/Aug/2011:16:05:26 +0400] - 0.080 -  "GET /XXX/ZZZ/
HTTP/1.1" 200 67
96.96.96.96 - - [10/Aug/2011:16:05:26 +0400] - 0.075 -  "GET /XXX/ZZZ/
HTTP/1.1" 200 67
96.96.96.96 - - [10/Aug/2011:16:05:26 +0400] - 0.012 -  "GET /XXX/ZZZ/
HTTP/1.1" 200 67
96.96.96.96 - - [10/Aug/2011:16:05:26 +0400] - 0.009 -  "GET /XXX/ZZZ/
HTTP/1.1" 200 1287
96.96.96.96 - - [10/Aug/2011:16:05:26 +0400] - 0.004 -  "GET /XXX/ZZZ/
HTTP/1.1" 200 67
96.96.96.96 - - [10/Aug/2011:16:05:26 +0400] - 0.003 -  "GET /XXX/ZZZ/
HTTP/1.1" 200 67
96.96.96.96 - - [10/Aug/2011:16:05:26 +0400] - 0.003 -  "GET /XXX/ZZZ/
HTTP/1.1" 200 67
96.96.96.96 - - [10/Aug/2011:16:05:26 +0400] - 0.002 -  "GET /XXX/ZZZ/
HTTP/1.1" 200 67
96.96.96.96 - - [10/Aug/2011:16:05:26 +0400] - 0.005 -  "GET /XXX/ZZZ/
HTTP/1.1" 200 67
96.96.96.96 - - [10/Aug/2011:16:05:26 +0400] - 0.003 -  "GET /XXX/ZZZ/
HTTP/1.1" 200 67
96.96.96.96 - - [10/Aug/2011:16:06:41 +0400] - 75.000 -  "GET /XXX/ZZZ/
HTTP/1.1" 504 182
96.96.96.96 - - [10/Aug/2011:16:06:41 +0400] - 75.000 -  "GET /XXX/ZZZ/
HTTP/1.1" 504 182

Где могут застревать запросы на 75
секунд?

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,213520,213642#msg-213642



Подробная информация о списке рассылки nginx-ru