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