измерять время с помощью cURL, избегая ответа на печать [duplicate]

Если вы хотите, чтобы структура имела определенный размер с GCC, например, используйте __attribute__((packed)) .

В Windows вы можете установить выравнивание в один байт при использовании cl .exe компилятор с опцией / Zp .

Обычно ЦП получает доступ к данным, который является кратным 4 (или 8), зависящей от платформы, а также от компилятор.

Итак, это вопрос выравнивания в основном.

У вас должны быть веские причины для его изменения.

447
задан sdasdadas 13 August 2013 в 18:27
поделиться

10 ответов

Из этого блестящего сообщения в блоге ... https://blog.josephscott.org/2011/10/14/timing-details-with-curl/

cURL поддерживает форматированный вывод для деталей запроса (см. справочную страницу cURL для деталей , в разделе -w, –write-out <format>). Для наших целей мы сосредоточимся на деталях, которые предоставляются.

  1. Создайте новый файл, curl-format.txt и вставьте:
        time_namelookup:  %{time_namelookup}\n
           time_connect:  %{time_connect}\n
        time_appconnect:  %{time_appconnect}\n
       time_pretransfer:  %{time_pretransfer}\n
          time_redirect:  %{time_redirect}\n
     time_starttransfer:  %{time_starttransfer}\n
                        ----------\n
             time_total:  %{time_total}\n
    
  2. Сделать запрос:
    curl -w "@curl-format.txt" -o /dev/null -s "http://wordpress.com/"
    
    Или в Windows это ...
    curl -w "@curl-format.txt" -o NUL -s "http://wordpress.com/"
    

Что это делает:

-w "@curl-format.txt" сообщает cURL, чтобы использовать наш файл формата -o /dev/null перенаправляет вывод запроса на / dev / null -s, сообщает cURL, чтобы не показывать метр прогресса "http://wordpress.com/", это URL-адрес, который мы запрашиваем. Используйте цитаты, особенно если ваш URL имеет «& amp;» Параметры строки запроса

И вот что вы вернетесь:

   time_namelookup:  0.001
      time_connect:  0.037
   time_appconnect:  0.000
  time_pretransfer:  0.037
     time_redirect:  0.000
time_starttransfer:  0.092
                   ----------
        time_total:  0.164

Сделайте ярлык Windows (он же BAT-файл )

Поместите эту команду в CURLTIME.BAT (в той же папке, что и curl.exe)

curl -w "@%~dp0curl-format.txt" -o NUL -s %*

Затем вы можете просто вызвать ...

curltime wordpress.org
1082
ответ дан matse 18 August 2018 в 20:11
поделиться
  • 1
    удивительный ответ. Спасибо. одна вещь, которую я должен был сделать, это добавить \n, чтобы разбить строку в текстовом файле – Jason Kim 2 May 2014 в 20:51
  • 2
    В Windows BAT-файле он отправляет только первый параметр, меняет его на передачу всех параметров и отключает эхо-команду сам: @curl -w "@%~dp0curl-format.txt" -o NUL -s %* Отличный ответ – padilo 1 October 2014 в 16:52
  • 3
    Спасибо @udoh, я обновил ответ, чтобы включить это. – Simon East 2 October 2014 в 02:09
  • 4
    замечательный ответ. как я также включаю текущую дату + время, когда завиток инициировал запрос? – Saqib Ali 13 December 2014 в 17:25
  • 5
    Привет! Я знаю, что этот ответ был сделан давно ... информация была действительно полезна, но у меня есть сомнения ... когда @SimonEast показывает, что вы получаете с помощью команды ... числа фиксированы, правильно? потому что я использую ту же команду, и если я добавляю все времена, то не равен time_total – hdlopez 14 July 2016 в 21:09

Если вы хотите проанализировать или суммировать задержку, вы можете попробовать сканер apache:

ab -n [number of samples] [url]

Например:

ab -n 100 http://www.google.com/

Он покажет:

This is ApacheBench, Version 2.3 <$Revision: 1757674 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.google.com (be patient).....done


Server Software:        gws
Server Hostname:        www.google.com
Server Port:            80

Document Path:          /
Document Length:        12419 bytes

Concurrency Level:      1
Time taken for tests:   10.700 seconds
Complete requests:      100
Failed requests:        97
   (Connect: 0, Receive: 0, Length: 97, Exceptions: 0)
Total transferred:      1331107 bytes
HTML transferred:       1268293 bytes
Requests per second:    9.35 [#/sec] (mean)
Time per request:       107.004 [ms] (mean)
Time per request:       107.004 [ms] (mean, across all concurrent requests)
Transfer rate:          121.48 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       20   22   0.8     22      26
Processing:    59   85 108.7     68     911
Waiting:       59   85 108.7     67     910
Total:         80  107 108.8     90     932

Percentage of the requests served within a certain time (ms)
  50%     90
  66%     91
  75%     93
  80%     95
  90%    105
  95%    111
  98%    773
  99%    932
 100%    932 (longest request)
13
ответ дан Andong 18 August 2018 в 20:11
поделиться

Вот ответ:

curl -X POST -d @file server:port -w %{time_connect}:%{time_starttransfer}:%{time_total}

Все переменные, используемые с -w, можно найти в man curl.

101
ответ дан Corey Goldberg 18 August 2018 в 20:11
поделиться
  • 1
    Для пользователей лучше добавлять новые строки: "\n%{time_connect}:%{time_starttransfer}:%{time_total}\n" – Sergei Kurenkov 3 February 2017 в 13:35
  • 2
    Для меня это не работало без кавычек. Я бы предложил добавить кавычки, указав формат / h / a / c / haproxy # ❯❯❯ curl -w & quot;% {time_total}\n & quot; google.com -o / dev / null -s 0.055 – Geek 23 February 2017 в 13:11
  • 3
    @Geek Обычно имеет смысл показывать ошибки при работе в бесшумном режиме (-sS). – x-yuri 3 May 2018 в 20:19

Эй, лучше, чем Apache Bench, имеет меньше проблем с SSL

./hey https://google.com -more
Summary:
  Total:    3.0960 secs
  Slowest:  1.6052 secs
  Fastest:  0.4063 secs
  Average:  0.6773 secs
  Requests/sec: 64.5992

Response time histogram:
  0.406 [1] |
  0.526 [142]   |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.646 [1] |
  0.766 [6] |∎∎
  0.886 [0] |
  1.006 [0] |
  1.126 [0] |
  1.246 [12]    |∎∎∎
  1.365 [32]    |∎∎∎∎∎∎∎∎∎
  1.485 [5] |∎
  1.605 [1] |

Latency distribution:
  10% in 0.4265 secs
  25% in 0.4505 secs
  50% in 0.4838 secs
  75% in 1.2181 secs
  90% in 1.2869 secs
  95% in 1.3384 secs
  99% in 1.4085 secs

Details (average, fastest, slowest):
  DNS+dialup:    0.1150 secs, 0.0000 secs, 0.4849 secs
  DNS-lookup:    0.0032 secs, 0.0000 secs, 0.0319 secs
  req write:     0.0001 secs, 0.0000 secs, 0.0007 secs
  resp wait:     0.2068 secs, 0.1690 secs, 0.4906 secs
  resp read:     0.0117 secs, 0.0011 secs, 0.2375 secs

Status code distribution:
  [200] 200 responses
1
ответ дан Jonathan 18 August 2018 в 20:11
поделиться

Следующее вдохновлено ответом Саймона. Он является автономным (не требует отдельного файла формата), что делает его отличным для включения в .bashrc.

curl_time() {
    curl -so /dev/null -w "\
   namelookup:  %{time_namelookup}s\n\
      connect:  %{time_connect}s\n\
   appconnect:  %{time_appconnect}s\n\
  pretransfer:  %{time_pretransfer}s\n\
     redirect:  %{time_redirect}s\n\
starttransfer:  %{time_starttransfer}s\n\
-------------------------\n\
        total:  %{time_total}s\n" "$@"
}

Более того, он должен работать со всеми аргументами, которые обычно выполняются curl , так как "$@" просто передает их. Например, вы можете сделать:

curl_time -X POST -H "Content-Type: application/json" -d '{"key": "val"}' https://postman-echo.com/post

Выход:

   namelookup:  0,125000s
      connect:  0,250000s
   appconnect:  0,609000s
  pretransfer:  0,609000s
     redirect:  0,000000s
starttransfer:  0,719000s
-------------------------
        total:  0,719000s
15
ответ дан Konstantin 18 August 2018 в 20:11
поделиться

Вот один однострочный Bash для повторного попадания на один и тот же сервер:

for i in {1..1000}; do curl -s -o /dev/null -w "%{time_total}\n" http://server/get_things; done
1
ответ дан Lucas 18 August 2018 в 20:11
поделиться

Ярлык, который вы можете добавить в свой .bashrc и т. д., основываясь на других ответах здесь:

function perf {
  curl -o /dev/null -s -w "%{time_connect} + %{time_starttransfer} = %{time_total}\n" "$1"
}

Использование:

> perf stackoverflow.com
0.521 + 0.686 = 1.290
42
ответ дан mahemoff 18 August 2018 в 20:11
поделиться
  • 1
    Я использую вариант, который отображает количество байтов, загруженных в течение измеренного времени: curl -o /dev/null -s -w "time_total: %{time_total} sec\nsize_download: %{size_download} bytes\n" https://www.google.com – jambroseclarke 23 July 2015 в 19:40

Я сделал дружественный форматтер для обнюхивания запросов на завивание, чтобы помочь с отладкой (см. комментарии для использования). Он содержит каждый известный выходной параметр, который вы можете записать в удобном для чтения формате.

https://gist.github.com/manifestinteractive/ce8dec10dcb4725b8513

4
ответ дан Manifest Interactive 18 August 2018 в 20:11
поделиться

Вариант 1. Чтобы измерить время отклика с помощью curl, используйте следующую команду:

curl -o /dev/null -s -w 'Total: %{time_total}\n'  https://www.google.com

Выход для образца:

Вариант 2. Чтобы получить более подробную информацию, используйте следующую команду:

curl -o /dev/null -s -w 'Connect: %{time_connect}\nStart Transfer: %{time_starttransfer}\nTotal: %{time_total}\n'  https://www.google.com

Выход образца:

Ref : Получить время отклика с помощью curl

47
ответ дан ThoQ 18 August 2018 в 20:11
поделиться
2
ответ дан Per Lundberg 30 October 2018 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: