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

31

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

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

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

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

Mei
источник

Ответы:

53

Если у вас установлен параллелизм на 1, между этими двумя нет разницы . Это начинает иметь значение, когда вы выполняете более 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 одновременных запросов.

Karol J. Piczak
источник