Re: Большое время в $request_time

Ruslan Ermilov ru at nginx.com
Sat Jan 19 06:52:19 UTC 2013


On Sat, Jan 19, 2013 at 01:59:53AM +0400, Михаил Монашёв wrote:
> Здравствуйте, Ruslan.
> 
> >> В доке написано:
> >> $request_time
> >>     время  обработки  запроса  в  секундах  с точностью до миллисекунд
> >>     (1.3.9,  1.2.6);  время, прошедшее с момента чтения первых байт от
> >>     клиента.
> >> 
> >> Что значит "от клиента"? Может "клиентом"? Тогда это объясняет большое
> >> время. Или "от клиента" относится к слову "запрос"? Какая-то
> >> многозначная и не очень понятная фраза получается.
> 
> > "От клиента" значит "от клиента", т.е. с момента, когда первые
> > байты данных от клиента дошли до nginx.
> 
> > Другими словами,
> 
> > http {
> >     server {
> > 	location / {
> > 	    return 200 "$request_time\n";
> > 	}
> >     }
> > }
> 
> > : $ ( echo 'GET / HTTP/1.1' ; echo 'Host: example.com' ; sleep 13;  echo ) | nc localhost 8000
> > : HTTP/1.1 200 OK
> > : Server: nginx/1.3.12
> > : Date: Fri, 18 Jan 2013 20:30:39 GMT
> > : Content-Type: text/plain
> > : Content-Length: 7
> > : Connection: keep-alive
> > : 
> > : 13.000
> 
> Ага, теперь понятно. Перед "от клиента" можно вставить "полученных"
> для ясности ИМХО.

"чтение" как бы подразумевает "получение", не?

> И понятно от какого момента ведётся отсчёт, но не
> сказано, до какого момента.  Например, до записи последнего байта
> отправленного клиенту (или до чего там на самом деле оно измеряется).

Как и для всех переменных, до момента вычисления значения
переменной.  В общем случае зависит от кэшируемости
переменной (не освещено в документации) и от знания, в
какой момент времени это значение вычисляется.  Но как
правило интуитивно понятно.  Например, в момент формирования
заголовка ответа, или в момент записи в access_log.
И в зависимости от, $request_time будет означать разные вещи.

> Т.е. чтение и запись - это сугубо программистские термины, выросшие из
> имён  функций  read()  и write(). ИМХО, понятнее получать и отправлять
> данные.

Можно ещё сказать

"время, прошедшее с момента получения сервером первых байт запроса"

> Хотя наверное сам вечером торможу и к чужим словам начинаю придираться
> :-)

Нет, просто $request_time вне контекста access_log это и вправду
трудно поддающаяся словесному описанию сущность, т.к. "момент до"
неизвестен.  При переделке $request_time в обычную переменную это
породило достаточно длинную внутреннюю дискуссию по формулировке
её описания.

Замечу, что описание $request_time в модуле ngx_http_log_module
осталось прежним; там "момент до" описан более конкретно, т.к.
он известен.



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