Назад | Перейти на главную страницу

Apache ab: объясните, пожалуйста, результат

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

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

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

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

Если у вас установлен уровень параллелизма 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 одновременных запросов.