Apache ab: будь ласка, поясніть результат


31

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

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

Це означає - для мене, що якщо ви вимірюєте всі паралельні запити (що б це не означало), то запити раптово повертаються на 100 разів швидше. Чому час на запит так зміниться? Це не має сенсу.

Чи є детальне пояснення цього та інших частин результату ab?

Відповіді:


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 одночасних запитів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.