ab нагрузочное тестирование

202

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

Я хочу знать следующее:

Сколько человек может обрабатывать сайт в минуту?

Пожалуйста, объясните мне команды, которые я должен выполнить, чтобы понять это.

Я перепробовал все учебники, и они сбивают с толку.

драгоценность
источник

Ответы:

332

Инструмент тестирования 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 alive.

После того, как процесс завершит 20 тысяч запросов, вы получите отзыв о статистике. Это покажет вам, насколько хорошо сайт работал в условиях стресса, который вы ему оказали при использовании указанных выше параметров.

Чтобы узнать, сколько людей сайт может обслуживать одновременно, просто посмотрите, является ли время ответа (среднее, минимальное и максимальное время ответа, неудавшиеся запросы и т. Д.) Числами, которые ваш сайт может принять (разные сайты могут требовать разную скорость). Вы можете запускать инструмент с разными значениями -c, пока не дойдете до места, где вы скажете: «Если я увеличу его, он начнет получать неудавшиеся запросы и сломается».

В зависимости от вашего веб-сайта вы ожидаете среднее количество запросов в минуту. Это так сильно, что вы не сможете смоделировать это с помощью ab. Однако подумайте об этом так: если ваш средний пользователь будет выполнять 5 запросов в минуту, а среднее время ответа, которое вы считаете допустимым, составляет 2 секунды, это означает, что 10 секунд из минуты 1 пользователь будет выполнять запросы, то есть только В 1/6 случаев он попадает на сайт. Это также означает, что если у вас есть 6 пользователей, обращающихся к сайту с помощью ab одновременно, у вас, вероятно, будет 36 пользователей в моделировании, даже если ваш уровень параллелизма (-c) равен всего 6.

Это зависит от поведения, которое вы ожидаете от своих пользователей, использующих сайт, но вы можете получить это из «Я ожидаю, что мой пользователь выполнит X запросов в минуту, и я считаю среднее время ответа допустимым, если оно составляет 2 секунды». Затем просто измените свой -c level, пока вы не достигнете 2-х секунд среднего времени отклика (но убедитесь, что максимальное время отклика и stddev все еще действительны) и посмотрите, насколько большим вы можете сделать -c.

Надеюсь, я ясно это объяснил :) Удачи

Мамсаак
источник
5
Прямой и ясный ответ! Не могли бы вы объяснить немного подробнее, почему вы получили это "Это также означает, что если у вас есть 6 пользователей, одновременно заходящих на сайт с помощью ab, у вас, вероятно, будет 36 пользователей в моделировании, даже если ваш уровень параллелизма (-c) всего лишь 6. "
kbariotis
3
Напоминаем, что вы, вероятно, захотите добавить -lопцию, если страница имеет динамический контент, чтобы не получить кучу неудачных запросов из-за разницы в длине контента между запросами.
jonathancardoso
77

Пожалуйста, объясните мне команды, которые я должен выполнить, чтобы понять это.

Самый простой тест, который вы можете сделать, - выполнить 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 почти всегда используется для сжатия вывода text / html на 25% -75% - эффекты которого не следует игнорировать из-за его влияния на общую производительность веб-сервера (т. Е. может передавать вдвое больше данных за то же время и т. д.).

Полученные результаты:

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)

правильный материал
источник
10

Шаги по настройке Apache Bench (AB) в Windows (рекомендуется IMO).

Шаг 1 - Установите Xampp.
Шаг 2 - Откройте CMD.
Шаг 3 - Перейдите к месту назначения apache bench ( 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)
Виджайсинь Пармар
заменить localhost на 127.0.0.1
akshaynagpal
3

Нагрузочного тестирования вашего API с использованием только ab недостаточно. Однако я думаю, что это отличный инструмент, который даст вам общее представление о производительности вашего сайта.

Если вы хотите использовать команду ab для тестирования нескольких конечных точек API с разными данными одновременно в фоновом режиме, вам необходимо использовать команду «nohup». Он запускает любую команду, даже когда вы закрываете терминал.

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

Иван Квасница
источник
3

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

последние два мне не удались: они приблизительны. после чего подумал попробовать «аб» и «абс».

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

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

вы должны создать в корне папку, такую ​​как «bench», где у вас есть 2 файла: test «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

А теперь, если внимательно присмотреться ...

сценарий void не дает нулевых результатов !!! ТАК ВЫВОД ЕСТЬ: от второго результата первый результат должен уменьшиться !!!

вот я получил:

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 результат, которого я ожидал!

Константин
источник