Нагрузочное тестирование сайта утилитой ab (Apache Benchmark)
В этой статье мы разберем как провести нагрузочное тестирование сайта утилитой ab (Apache Benchmark).
В свое время я занимался разработкой виджета онлайн-оплаты билетов для сайтов. И от заказчика поступил вопрос: «А на какую нагрузку рассчитан твой виджет? Сколько человек может одновременно работать с вашим виджетом?»
После замеров получилось примерно 50 одновременных соединений/загрузок виджета через браузер.
При учете, что это был не Unix shared Хостинг, а полноценный VPS от хостинга netnagels.ru.
Установка ab в Ubuntu.
Для работы с утилитой ab в ОС Ubuntu и Debian необходимо установить пакет apache2-utils.
1 | sudo apt-get install apache2-utils |
Если Вы работаете под Windows, то, например, можно воспользоваться утилитой ab.exe, входящей в состав дистрибутива OpenServer. При этом для http-подключений используйте файл ab.exe, для https — abs.exe
После установки OpenServer в папку x:\OpenServer утилиты можно найти, к примеру в папке:
x:\OpenServer\modules\http\Apache-2.2\bin
Тестирование с помощью утилиты ab.
Нагрузочное тестирование позволяет посмотреть время ответа веб-сервера при выполнении ряда запросов к нему.
Запросы могут идти как с 1 условного компьютера, так и параллельно с множества условных компьютеров (выполнением множества параллельных запросов).
Рекомендуется делать нарузочное тестирование сначала для статических файлов (например, html-страниц), а затем для динамических файлов (к примеру, php-страниц; можно для теста отставить в странице одну функцию phpinfo();). Чтобы посмотреть разницу во времени отдачи этих типов файлов веб-сервером.
Утилита имеет множество опций. Приведу самые необходимые:
-c concurrency — количество параллельных запросов в единицу времени. По умолчанию это 1 запрос в единицу времени (будем считать, что в секунду).
-n requests — количество запросов, которое требуется произвести в течение сессии тестирования. По умолчанию, выполняется только 1 запрос. Запросы выполняются последовательно. Количество запросов не может быть меньше числа параллельных запросов.
Сегодня мы измерим производительность веб-сервера соц.сети Вконтакте. Для этого выполним команду:
x:\OpenServer\modules\http\Apache-2.2\bin>abs.exe -c 10 -n 1000 https://vk.com/
В конце url не забудьте поставить слеш /.
Конечно, у веб-сервера Вконтакте стоит блокировка после определенного числа запросов на выдачу контента, но все-таки сделать измерения можно. Не переусердствуйте с числом запросов. Иначе Вас могут принять за хакера и чего-доброго заблокировать.
Получим ответ:
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking vk.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: Apache
Server Hostname: vk.com
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-ECDSA-AES128-GCM-SHA256,256,128
Document Path: /
Document Length: 0 bytes
Concurrency Level: 10
Time taken for tests: 67.340 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Non-2xx responses: 1000
Total transferred: 417000 bytes
HTML transferred: 0 bytes
Requests per second: 14.85 [#/sec] (mean)
Time per request: 673.404 [ms] (mean)
Time per request: 67.340 [ms] (mean, across all concurrent requests)
Transfer rate: 6.05 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 147 399 99.9 396 700
Processing: 56 270 99.5 272 555
Waiting: 50 179 80.6 171 503
Total: 221 669 58.8 665 1117
Percentage of the requests served within a certain time (ms)
50% 665
66% 677
75% 684
80% 690
90% 708
95% 745
98% 812
99% 896
100% 1117 (longest request)
Выводы, которые можно сделать из проведенного нагрузочного тестирования.
1. Мы провели в общей сложности 1000 запросов для 10 параллельных клиентов. Из них было 0 запросов, завершившихся ошибкой вебсервера
2. Мы получили производительность вебсервера 14.85 запросов в секунду
3. Среднее время обработки 1 запроса 673.404 мс, т.е. 0,673 секунды
4. 50% запросов выполнились за 665 мс, еще 40% запросов за 708 мс, самый долгий запрос составил 1117 мс.
Полезные ссылки.
https://ubuntu.com/download/desktop
https://httpd.apache.org/docs/2.4/programs/ab.html
Качественный unix shared и vps/vds-хостинг для вашего сайта