Вопрос: Apache ab: пожалуйста, объясните вывод


Я огляделся и не могу найти подробного объяснения вывода. Большинство из них действительно легко понять, но есть одна часть, которая меня бесит:

Time per request:       109537.505 [ms] (mean)
Time per request:       109.538 [ms] (mean, across all concurrent requests)

Это означает для меня, что если вы измеряете все параллельные запросы (независимо от того, что это означает), то запросы внезапно возвращаются на 100 раз быстрее. Почему время, затраченное на запрос, сильно изменилось? Это не имеет никакого смысла.

Есть ли подробное объяснение этой и других частей вывода ab?


29
2018-05-26 22:20


Источник




Ответы:


Если у вас есть параллелизм, установленный в 1, нет никакой разницы между этими двумя. Это начинает иметь значение, если одновременно выполняется более одного запроса.

Давайте посмотрим на пример того, что я получаю от своих localhost:

ab -c 1 -n 1000 http://localhost/

дам:

Time taken for tests:   3.912 seconds
Time per request:       3.912 [ms] (mean)
Time per request:       3.912 [ms] (mean, across all concurrent requests)

Это означает, что для выполнения 1000 запросов один за другим понадобилось 3.912 секунд. Таким образом, для одного запроса потребовалось 3,912 секунды / 1000 = 3,912 мс в среднем.

Теперь немного поднимем уровень параллелизма:

ab -c 10 -n 1000 http://localhost/

Time taken for tests:   0.730 seconds
Time per request:       7.303 [ms] (mean)
Time per request:       0.730 [ms] (mean, across all concurrent requests)

На этот раз вместо 3.912 секунд нам нужно всего 0,730 секунды, чтобы выполнить задание. Мы выполнили 1000 запросов за 0.730 секунд, поэтому один запрос займет в среднем 0,730 секунды / 1000 = 0,730 мс (последняя строка). Но ситуация немного отличается, так как мы сейчас выполняем 10 запросов одновременно. Так что на самом деле наш номер здесь не отражает реального времени, которое требуется для завершения одного запроса, 0,730 мс * 10 (количество одновременных запросов) = 7,303 мс. Это время, которое требуется в среднем для одного запроса для завершения, если он был выполнен не одновременно (или, вернее, изолированно на текущем уровне параллелизма).

Последнее число, которое вы видите (0,730 мс), используется, чтобы приблизительно рассказать, сколько общее время увеличится, если вы добавили 1 запрос (-n 1001) с использованием текущего уровня параллелизма -c 10 (ну, по крайней мере, теоретически это так).

7.303 мс дает вам обзор того, как долго будет выполняться один изолированный запрос.

Изменение, которое вы видите между примером -c 1 а также -c 10:

[-c 1 ]: Time per request:       3.912 [ms] (mean)
[-c 10]: Time per request:       7.303 [ms] (mean)

означает, что один запрос выполняется быстрее, если он выполняется только один -c 1, Если есть несколько запросов -c 10 конкурируя за ресурсы, один запрос займет больше времени. Но если принять во внимание тот факт, что вы выполняете 10 таких запросов одновременно, то в течение 7.303 мс вы имеете дело с 10 запросами вместо 1.

Итак, как измерение задержки для одного запроса - полезен 7.303 мс. Но как показатель эффективности - 0,730 мс более значим. Фактически, как 0,730 мс <3,912 мс, вы увидите, что вы сможете обслуживать больше запросов в секунду в совокупности, если вы разрешаете 10 одновременных запросов.


49
2018-05-26 22:43