ab навантаження тестування


194

Може хтось, будь ласка, перегляне мене через процес, як я можу завантажити тест свого веб-сайту за допомогою інструменту стенд apache ( ab)?

Хочу знати наступне:

Скільки людей за хвилину може обробляти сайт?

Будь ласка, пройдіть мене через команди, які я повинен пробігти, щоб зрозуміти це.

Я пробував кожен підручник, і вони плутають.

Відповіді:


315

Інструмент орієнтиру apache є дуже простим, і, хоча він дасть вам ґрунтовне уявлення про деяку ефективність, погано від нього залежати лише у тому випадку, якщо ви плануєте піддавати свій сайт серйозним навантаженням у виробництві.

Сказавши це, ось найпоширеніші та найпростіші параметри:

-c: ("Паралельність"). Вказує, скільки клієнтів (людей / користувачів) одночасно будуть потрапляти на сайт. Під час abзапуску -cна сайті будуть клієнти, які потрапляють на сайт. Це те, що фактично визначає кількість стресу, який ваш сайт зазнає під час еталону.

-n: Вказує, скільки запитів буде зроблено. Це просто визначає довжину еталону. Високе -nзначення зі -cзначенням, яке може підтримувати ваш сервер, - це гарна ідея, щоб усе не порушувалося в умовах тривалого стресу: підтримувати стрес протягом 5 секунд не так, як протягом 5 годин.

-k: Це роблять браузери функціональності "KeepAlive" від природи. Вам не потрібно передавати значення, -kоскільки воно "булеве" (це означає, що це означає, що ви хочете для вашого тесту використовувати заголовок Keep Alive з HTTP та підтримувати з'єднання). Оскільки браузери це роблять, і ви, ймовірно, захочете імітувати стрес і потоки, які матиме ваш веб-сайт у веб-переглядачах, рекомендується зробити орієнтир для цього.

Заключний аргумент - просто господар. За замовчуванням він потрапить на протокол http: //, якщо ви не вказали його.

ab -k -c 350 -n 20000 example.com/

Випустивши команду вище, ви будете натискати http://example.com/ 350 одночасними з'єднаннями, поки не буде виконано 20 тис. Запитів. Це буде зроблено, використовуючи заголовок "Keep Live".

Після закінчення 20 тисяч запитів ви отримаєте відгуки про статистику. Це покаже вам, наскільки добре веб-сайт виконаний під напругою, яку ви поставили під час використання вищевказаних параметрів.

Щоб дізнатися, скільки людей може працювати з сайтом одночасно, просто подивіться, чи час відгуку (означає, що мінімум та максимум разів відповіді, невдалі запити тощо) - це цифри, які ваш сайт може прийняти (різні сайти можуть бажати різної швидкості). Ви можете запускати інструмент із різними значеннями -c, поки ви не потрапите на місце, де ви скажете "Якщо я збільшу його, він почне отримувати невдалі запити і він ламається".

Залежно від вашого веб-сайту, ви очікуєте середню кількість запитів в хвилину. Це дуже різниться, ви не зможете змоделювати це за допомогою ab. Однак подумайте про це так: Якщо ваш середній користувач буде отримувати 5 запитів в хвилину, а середній час відповіді, який ви вважаєте дійсним, становить 2 секунди, це означає, що 10 секунд із хвилини 1 користувач буде на запити, тобто лише 1/6 часу це буде потрапляти на сайт. Це також означає, що якщо у вас 6 користувачів одночасно потрапляють на сайт з ab, ви, ймовірно, будете мати 36 користувачів у симуляції, навіть якщо ваш рівень одночасності (-c) становить лише 6.

Це залежить від поведінки, яку ви очікуєте від користувачів, які користуються сайтом, але ви можете отримати це від "Я очікую, що мій користувач звернеться до X запитів за хвилину, і я вважаю середній час відповіді дійсним, якщо це 2 секунди". Потім просто змініть рівень -c, поки ви не досягнете 2 секунди середнього часу відгуку (але переконайтеся, що максимальний час відповіді та stddev все ще дійсний) і подивіться, наскільки великим ви можете зробити -c.

Я сподіваюся, що я пояснив це чітко :) Удачі


5
Відверта і чітка відповідь! Поясніть, будь ласка, трохи більше про те, чому ви отримали це? "Це також означає, що якщо у вас 6 користувачів одночасно потрапляють на сайт з ab, ви, ймовірно, будете мати 36 користувачів у симуляції, навіть якщо ваш рівень одночасності (-c) лише 6. "
kbariotis

3
Нагадуємо, що ви, мабуть, хочете додати -lпараметр, якщо сторінка має динамічний контент, таким чином ви не отримаєте купу невдалих запитів через те, що довжина вмісту відрізняється між запитами.
JCM

73

Будь ласка, пройдіть мене через команди, які я повинен пробігти, щоб зрозуміти це.

Найпростіший тест, який ви можете зробити, - це виконувати 1000 запитів, 10 одночасно (що приблизно імітує 10 одночасних користувачів, отримуючи по 100 сторінок кожна - протягом тривалості тесту).

ab -n 1000 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://www.example.com/

-n 1000 - кількість запитів, які потрібно зробити.

-c 10 говорить AB робити 10 запитів одночасно, а не 1 запит за раз, щоб краще імітувати одночасних відвідувачів (проти послідовних відвідувачів).

-kнадсилає KeepAliveзаголовок, який просить веб-сервер не вимикати з'єднання після кожного запиту, а натомість продовжувати його повторне використання.

Я також надсилаю додатковий заголовок, Accept-Encoding: gzip, deflateтому що mod_deflate майже завжди використовується для стиснення виводу тексту / html 25% -75% - ефекти від якого не слід відкидати через вплив на загальну продуктивність веб-сервера (тобто, може переносити 2x дані за однаковий проміжок часу тощо).

Результати:

Benchmarking www.example.com (be patient)
Completed 100 requests
...
Finished 1000 requests


Server Software:        Apache/2.4.10
Server Hostname:        www.example.com
Server Port:            80

Document Path:          /
Document Length:        428 bytes

Concurrency Level:      10
Time taken for tests:   1.420 seconds
Complete requests:      1000
Failed requests:        0
Keep-Alive requests:    995
Total transferred:      723778 bytes
HTML transferred:       428000 bytes
Requests per second:    704.23 [#/sec] (mean)
Time per request:       14.200 [ms] (mean)
Time per request:       1.420 [ms] (mean, across all concurrent requests)
Transfer rate:          497.76 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:     5   14   7.5     12      77
Waiting:        5   14   7.5     12      77
Total:          5   14   7.5     12      77

Percentage of the requests served within a certain time (ms)
  50%     12
  66%     14
  75%     15
  80%     16
  90%     24
  95%     29
  98%     36
  99%     41
 100%     77 (longest request)

Для найпростішої інтерпретації ігноруйте все АЛЕ цього рядка:

Requests per second:    704.23 [#/sec] (mean)

Помножте це на 60, і у вас є запити в хвилину.

Щоб отримати результати в реальному світі, вам потрібно буде протестувати Wordpress замість статичного файлу HTML або index.php, тому що вам потрібно знати, як все працює разом: включаючи складний PHP-код та кілька запитів MySQL ...

Наприклад, ось результати тестування свіжої установки Wordpress у тій же системі та середовищі WAMP (я використовую WampDeveloper, але є також Xampp, WampServer та інші) ...

Requests per second:    18.68 [#/sec] (mean)

Це на 37 разів повільніше!

Після тесту навантаження є кілька речей, які ви можете зробити для поліпшення загальної продуктивності (запити за секунду), а також зробити веб-сервер стабільнішим при більшому навантаженні (наприклад, збільшення -nі -cсхильність до краху Apache), що Ви можете прочитати тут:

Завантажити тестування Apache за допомогою AB (Apache Bench)


9

Кроки з налаштування Apache Bench (AB) на windows (IMO - рекомендується).

Крок 1 - Встановіть Xampp.
Крок 2 - Відкрийте CMD.
Крок 3 - Перейдіть до пункту призначення апач ( cd C:\xampp\apache\bin) від CMD.
Крок 4 - Вставте команду ( ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/)
Крок 5 - Зачекайте. Зроблено


Це не працює ... Я отримую цю помилку: Бенчмаркінг localhost (будьте терплячі) ... apr_socket_recv: Підключення відмовлено (111)
Vijaysinh Parmar

замініть localhost на 127.0.0.1
akshaynagpal

3

Мені також було цікаво, чи можу я виміряти швидкість мого скрипту за допомогою apche abs або побудувати / знищити скрипт для вимірювання php або розширення php.

останні два провалилися для мене: вони приблизні. після чого я подумав спробувати "аб" і "абс".

команда "ab -k -c 350 -n 20000 example.com/" прекрасна тим, що все простіше!

але хто-небудь думав "localhost" на будь-якому сервері apache, наприклад, www.apachefriends.org?

ви повинні створити папку, наприклад, "bench" у корені, де у вас є два файли: тест "bench.php" та посилання "void.php".

а потім: орієнтир!

bench.php

<?php

for($i=1;$i<50000;$i++){
    print ('qwertyuiopasdfghjklzxcvbnm1234567890');
}
?>

void.php

<?php
?>

на робочому столі ви повинні використовувати .bat файл (в Windows), як це:

лав.бат

"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
pause

Тепер якщо уважно приділити увагу ...

недійсний скрипт не дає нульових результатів !!! ТАК ВИСНОВОК: З другого результату перший результат слід зменшити !!!

ось я отримав:

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/void.php
Document Length:        0 bytes

Concurrency Level:      1
Time taken for tests:   11.219 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      2150000 bytes
HTML transferred:       0 bytes
Requests per second:    891.34 [#/sec] (mean)
Time per request:       1.122 [ms] (mean)
Time per request:       1.122 [ms] (mean, across all concurrent requests)
Transfer rate:          187.15 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:     0    1   0.9      1      17
Waiting:        0    1   0.9      1      17
Total:          0    1   0.9      1      17

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      1
  95%      2
  98%      2
  99%      3
 100%     17 (longest request)

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/bench.php
Document Length:        1799964 bytes

Concurrency Level:      1
Time taken for tests:   177.006 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      18001600000 bytes
HTML transferred:       17999640000 bytes
Requests per second:    56.50 [#/sec] (mean)
Time per request:       17.701 [ms] (mean)
Time per request:       17.701 [ms] (mean, across all concurrent requests)
Transfer rate:          99317.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:    12   17   3.2     17      90
Waiting:        0    1   1.1      1      26
Total:         13   18   3.2     18      90

Percentage of the requests served within a certain time (ms)
  50%     18
  66%     19
  75%     19
  80%     20
  90%     21
  95%     22
  98%     23
  99%     26
 100%     90 (longest request)

c:\xampp\htdocs\bench>pause
Press any key to continue . . .

90-17 = 73 результат, який я очікую!


2

Завантажити тестування свого API за допомогою просто ab недостатньо. Однак я думаю, що це чудовий інструмент, який дає вам основне уявлення про ефективність вашого сайту.

Якщо ви хочете використовувати команду ab для тестування кількох кінцевих точок API з різними даними, одночасно у фоновому режимі, вам потрібно скористатися командою "nohup". Він виконує будь-яку команду, навіть коли ви закриваєте термінал.

Я написав простий сценарій, який автоматизує весь процес, сміливо використовуйте його: http://blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-use-this-simple-shell-script

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