Расчет времени обработки сервера с помощью Curl

Я получаю информацию о запросе времени с помощью curl, используя опцию --write-out, как описано в этой статье.

Вот пример вывода из одного из моих запросов:

        time_namelookup:  0.031
           time_connect:  0.328
        time_appconnect:  1.560
       time_pretransfer:  1.560
          time_redirect:  0.000
     time_starttransfer:  1.903
                        ----------
             time_total:  2.075

Мой вопрос: как определить, сколько времени сервер обрабатывал запрос? Ответ:

time_starttransfer - time-connect

То есть, время, с которого было установлено соединение, когда сервер начинает отправлять свой ответ? Это кажется правильным, но я хочу быть уверенным.

Подробные сведения о переменных крутильных колебаний можно найти здесь: http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html

Ответ 1

Да, (time_starttransfer - time-connect) - время от подключения было замечено завиванием, пока не появился первый байт. Обратите внимание, что он также включает время передачи, поэтому для удаленного сайта он будет длиннее просто из-за этого.

Ответ 2

Я бы сказал, что вы правы, (time_starttransfer - time_connect) определенно является количеством времени, затраченного сервером на обработку запроса.

Однако - я также задавался вопросом, в чем разница между time_connect и time_pretransfer? (заинтригованный комментариями @Schwartzie и @Cheeso)

Посмотрев на несколько завихренных запросов в Интернете, я заметил, что иногда они равны, а иногда и нет.

Затем я понял (по крайней мере, я так считаю), что они отличаются только запросами HTTPS, заставляя серверу некоторое время расшифровывать уровень ssl, что не совсем то время, которое тратится на целевое приложение, а на время, затраченное на размещение сервера приложение/служба.

Время для дешифрования ssl (и для соединения также, указанное в time_connect) является time_appconnect, и только тогда, когда он 0 (например, для запросов без HTTPS) - time_connect и time_pretransfer являются EQUAL, в противном случае для запросов https они отличаются, и для https time_pretransfer будет равно time_appconnect (а не time_connect).

Проверьте следующие два примера:

  • curl -kso/dev/null -w "time_connect =% {time_connect}, time_appconnect:% {time_appconnect}, time_pretransfer =% {time_pretransfer}\n" http://www.csh.rit.edu

    • time_connect = 0.128, time_appconnect: 0.000, time_pretransfer = 0.128
  • curl -kso/dev/null -w "time_connect =% {time_connect}, time_appconnect:% {time_appconnect}, time_pretransfer =% {time_pretransfer}\n" https://www.csh.rit.edu

    • time_connect = 0.133, time_appconnect: 0.577, time_pretransfer = 0.577

поэтому я бы сказал, что time_pretransfer более точен для использования по сравнению с time_connect, так как он будет уважать ssl-соединения и, возможно, некоторые другие вещи, о которых я не знаю.

Со всеми предыдущими словами я бы сказал, что более точный ответ на вопрос:

  • "Как определить, сколько времени сервер обработал запрос?"

вероятно, будет:

  • time_starttransfer - time_pretransfer

как уже упоминалось @Schwartzie, я просто хотел понять, почему.