Если вы хотите, чтобы структура имела определенный размер с GCC, например, используйте __attribute__((packed))
.
В Windows вы можете установить выравнивание в один байт при использовании cl .exe компилятор с опцией / Zp .
Обычно ЦП получает доступ к данным, который является кратным 4 (или 8), зависящей от платформы, а также от компилятор.
Итак, это вопрос выравнивания в основном.
У вас должны быть веские причины для его изменения.
Из этого блестящего сообщения в блоге ... https://blog.josephscott.org/2011/10/14/timing-details-with-curl/
cURL поддерживает форматированный вывод для деталей запроса (см. справочную страницу cURL для деталей , в разделе -w, –write-out <format>
). Для наших целей мы сосредоточимся на деталях, которые предоставляются.
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
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
Поместите эту команду в CURLTIME.BAT (в той же папке, что и curl.exe)
curl -w "@%~dp0curl-format.txt" -o NUL -s %*
Затем вы можете просто вызвать ...
curltime wordpress.org
Если вы хотите проанализировать или суммировать задержку, вы можете попробовать сканер 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)
Вот ответ:
curl -X POST -d @file server:port -w %{time_connect}:%{time_starttransfer}:%{time_total}
Все переменные, используемые с -w
, можно найти в man curl
.
"\n%{time_connect}:%{time_starttransfer}:%{time_total}\n"
– Sergei Kurenkov
3 February 2017 в 13:35
-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
Следующее вдохновлено ответом Саймона. Он является автономным (не требует отдельного файла формата), что делает его отличным для включения в .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
Вот один однострочный Bash для повторного попадания на один и тот же сервер:
for i in {1..1000}; do curl -s -o /dev/null -w "%{time_total}\n" http://server/get_things; done
Ярлык, который вы можете добавить в свой .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
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
Вариант 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
Выход образца:
\n
, чтобы разбить строку в текстовом файле – Jason Kim 2 May 2014 в 20:51@curl -w "@%~dp0curl-format.txt" -o NUL -s %*
Отличный ответ – padilo 1 October 2014 в 16:52time_total
– hdlopez 14 July 2016 в 21:09