Я протестировал свой сервер с помощью k6 и у меня есть некоторые сомнения по поводу полученных мной результатов.
/\ |‾‾| /‾‾/ /‾/
/\ / \ | |_/ / / /
/ \/ \ | | / ‾‾\
/ \ | |‾\ \ | (_) |
/ __________ \ |__| \__\ \___/ .io
init [----------------------------------------------------------] runner
init [----------------------------------------------------------] options
init [----------------------------------------------------------] executor
init [----------------------------------------------------------] engine
init [----------------------------------------------------------] collector
init [----------------------------------------------------------] server
execution: local
output: -
script: ./src/benchmark/script.js
duration: 20s, iterations: -
vus: 1, max: 1
init [----------------------------------------------------------] starting
✓ status was 200
checks.....................: 100.00% ✓ 477 ✗ 0
data_received..............: 9.5 GB 477 MB/s
data_sent..................: 55 kB 2.8 kB/s
http_req_blocked...........: avg=3.69µs min=1.88µs med=2.87µs max=282.62µs p(90)=4.08µs p(95)=4.33µs
http_req_connecting........: avg=485ns min=0s med=0s max=232.2µs p(90)=0s p(95)=0s
http_req_duration..........: avg=18.87ms min=18.18ms med=18.86ms max=27.83ms p(90)=19.35ms p(95)=19.44ms
http_req_receiving.........: avg=36.37µs min=13.59µs med=23.64µs max=786.38µs p(90)=60.69µs p(95)=80.54µs
http_req_sending...........: avg=39.7µs min=13.82µs med=20.18µs max=3.16ms p(90)=34.81µs p(95)=35.58µs
http_req_tls_handshaking...: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...........: avg=18.8ms min=18.15ms med=18.82ms max=27.77ms p(90)=19.26ms p(95)=19.31ms
http_reqs..................: 478 23.899925/s
iteration_duration.........: avg=41.83ms min=40.07ms med=41.51ms max=112.2ms p(90)=42.18ms p(95)=42.66ms
iterations.................: 477 23.849925/s
vus........................: 1 min=1 max=1
vus_max....................: 1 min=1 max=1
Соображения:
150 packets transmitted, 150 received, 0% packet loss, time 152557ms
rtt min/avg/max/mdev = 0.162/0.220/0.293/0.031 ms
150 packets transmitted, 150 received, 0% packet loss, time 152569ms
rtt min/avg/max/mdev = 0.164/0.217/0.262/0.028 ms
150 packets transmitted, 150 received, 0% packet loss, time 152574ms
rtt min/avg/max/mdev = 0.162/0.218/0.426/0.037 ms
150 packets transmitted, 150 received, 0% packet loss, time 152567ms
rtt min/avg/max/mdev = 0.173/0.227/0.266/0.028 ms
Меня интересуют следующие показатели:
Если в документации k6 сказано, что:
Среднее значение ping составило 0,220 мс (220 мкс), а значения параметров http_req_receiving и http_req_sending ниже среднего значения ping.
Проблема в том, что я не знаю, как связать пинг с http_req_receiving и http_req_sending.
Я думаю, что http_req_sending - это время, затрачиваемое на путешествие запроса из точки A в точку B, а http_req_receiving - это время, затрачиваемое на путешествие запроса из точки C в точку D. Я прав?
Проверьте следующее изображение: https://i.ibb.co/m6JJDK1/Screen-Shot-2019-02-02-at-11-23-00.png
РЕДАКТИРОВАТЬ: Я тестировал завиток, который ... предложил. Вот результаты некоторых кудрей:
Для ответа, содержащего 20 миллионов символов (20 МБ):
Подключить: 0,000241 TTFB: 0,028431 Общее время: 0,061042
Подключить: 0,000254 TTFB: 0,018196 Общее время: 0,050792
Подключить: 0,000236 TTFB: 0,023359 Общее время: 0,056002
Подключить: 0,001865 TTFB: 0,019826 Общее время: 0,053621
Подключить: 0,000238 TTFB: 0,018920 Общее время: 0,051638
Connect: 0,000240 TTFB: 0,018243 Общее время: 0,050905
Подключить: 0,000226 TTFB: 0,019197 Общее время: 0,051828
Подключить: 0,000226 TTFB: 0,018293 Общее время: 0,050941
Подключить: 0,000239 TTFB: 0,019187 Общее время: 0,051830
Для ответа, содержащего 1 символ (1 байт):
Подключить: 0,000241 TTFB: 0,000539 Общее время: 0,000562
Подключить: 0,000238 TTFB: 0,000532 Общее время: 0,000553
Подключить: 0,000237 TTFB: 0,000525 Общее время: 0,000547
Подключить: 0,000257 TTFB: 0,000524 Общее время: 0,000548
Подключить: 0,000231 TTFB: 0,000499 Общее время: 0,000519
Подключить: 0,000238 TTFB: 0,000512 Общее время: 0,000537
Подключить: 0,000232 TTFB: 0,000511 Общее время: 0,000534
Как уже упоминалось, показатели, которые предоставляет k6, (в основном) предназначены для HTTP как протокола, и поэтому связать его с ping может быть немного ... сложно :).
В принципе ping
измеряет, как долго один пакет проходит от точки А до точки Б. и от C до D вместе. Он не измеряет ни один из путей по отдельности. Это то, что обычно называют поездкой туда и обратно. Также важно отметить, что ping не использует tcp, который добавляет дополнительные ускорения / замедления, когда у нас есть несколько циклов обмена, как в случае HTTP-запросов.
С другой стороны, k6 измеряет, насколько разные части все HTTP-запрос (множество циклов приема-передачи) выполняется. В частности http_req_sending
измеряет все время с момента, когда k6 установил соединение с хостом, до момента, когда он написал запрос. С уважением http_req_receiving
- это все время с момента получения k6 первого байта до момента получения последнего байта ответа. Ни один из них на самом деле не измеряет количество обращений - в случае отправки базовая ОС может фактически не отправлять данные в течение некоторого времени, и мы можем очень быстро получить весь ответ от ОС.
Для ваших конкретных номеров: http_req_sending
выглядит неплохо - он маленький, потому что в основном мы записываем несколько байтов в соединение, а ОС говорит, что отправит данные. Интересно твое http_req_receiving
который также очень мал (постоянно), поскольку я ожидал, что с ответом такого размера потребуется немного больше времени. Либо где-то до k6 происходит очень тяжелая буферизация, либо вы используете старую версию k6 (до v0.23.1), где у нас были некоторые ошибки при использовании HTTP2. Или мы не исправили все ошибки в этих случаях :(.
Возможно, вы захотите протестировать с curl
чтобы увидеть, насколько велико будет время отклика
curl -o /dev/null -H 'Cache-Control: no-cache' -s -w "Connect: %{time_connect} TTFB: %{time_starttransfer} Total time: %{time_total} \n"
curl скрипт из https://gist.github.com/sandeepraju/1f5fbdbdd89551ba7925abe2645f92b5
источник: я разработчик k6;)