В этой главе мы сравним результаты с флагами и без них. Давайте посмотрим, как использование соответствующих флагов может повысить производительность вашего веб-приложения. Перед этим нам нужно понять, как, если ваше приложение простое, вы можете не заметить разницу. Как и в случае с нашим простым приложением, с флагами и без флагов. Затем мы выполним тот же тест с https://www.apache.org/ URL и увидим разницу.
Тестирование нашего приложения без флагов
В этом разделе мы поймем, как тестировать наше приложение без флагов.
$ ab -n 100 -c 10 http://127.0.0.1:8000/
Выход
This is ApacheBench, Version 2.3 <$Revision: 1604373 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient).....done Server Software: Rocket Server Hostname: 127.0.0.1 Server Port: 8000 Document Path: / Document Length: Variable Concurrency Level: 10 Time taken for tests: 0.244 seconds Complete requests: 100 Failed requests: 0 Non-2xx responses: 100 Keep-Alive requests: 0 Total transferred: 27700 bytes HTML transferred: 6600 bytes Requests per second: 2208.77 [#/sec] (mean) Time per request: 4.527 [ms] (mean) Time per request: 0.453 [ms] (mean, across all concurrent requests) Transfer rate: 597.49 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 1 2 0.7 2 3 Processing: 0 2 0.7 2 4 Waiting: 0 2 1.0 2 3 Total: 4 4 0.3 4 5 Percentage of the requests served within a certain time (ms) 50% 4 66% 4 75% 5 80% 5 90% 5 95% 5 98% 5 99% 5 100% 5 (longest request)
Тестирование нашего приложения с флагами
В этом разделе мы поймем, как протестировать наше приложение с флагами.
$ ab -l -r -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://127.0.0.1:8000/
Выход
... Requests per second: 2277.07 [#/sec] (mean) Time per request: 4.392 [ms] (mean) Time per request: 0.439 [ms] (mean, across all concurrent requests) Transfer rate: 615.97 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 1 2 0.7 2 3 Processing: 0 2 0.7 2 4 Waiting: 0 2 1.0 2 3 Total: 4 4 0.2 4 5 Percentage of the requests served within a certain time (ms) 50% 4 66% 4 75% 4 80% 4 90% 5 95% 5 98% 5 99% 5 100% 5 (longest request)
Мы можем просто заметить, что между выходной статистикой нет большой разницы.
Тестирование сайта организации Apache без флагов
Давайте теперь посмотрим, как протестировать веб-сайт Apache Organization без флагов.
$ ab -n 100 -c 10 http://www.apache.org/
Выход
This is ApacheBench, Version 2.3 <$Revision: 1604373 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.apache.org (be patient).....done Server Software: Apache/2.4.7 Server Hostname: www.apache.org Server Port: 80 Document Path: / Document Length: 58433 bytes Concurrency Level: 10 Time taken for tests: 1.498 seconds Complete requests: 100 Failed requests: 0 Total transferred: 5877500 bytes HTML transferred: 5843300 bytes Requests per second: 66.74 [#/sec] (mean) Time per request: 149.840 [ms] (mean) Time per request: 14.984 [ms] (mean, across all concurrent requests) Transfer rate: 3830.58 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 12 110 295.2 12 1012 Processing: 37 38 0.5 38 39 Waiting: 12 13 0.3 13 15 Total: 49 147 295.4 50 1051 Percentage of the requests served within a certain time (ms) 50% 50 66% 50 75% 50 80% 50 90% 816 95% 1050 98% 1051 99% 1051 100% 1051 (longest request)
Тестирование сайта организации Apache с флагами
Теперь давайте проверим веб-сайт организации Apache с флагами.
$ ab -l -r -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://www.apache.org/
Выход
... Document Length: Variable Concurrency Level: 10 Time taken for tests: 0.357 seconds Complete requests: 100 Failed requests: 0 Keep-Alive requests: 100 Total transferred: 1358510 bytes HTML transferred: 1317700 bytes Requests per second: 280.28 [#/sec] (mean) Time per request: 35.678 [ms] (mean) Time per request: 3.568 [ms] (mean, across all concurrent requests) Transfer rate: 3718.41 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 3.7 0 12 Processing: 14 17 21.3 15 227 Waiting: 14 17 21.3 14 227 Total: 14 18 21.5 15 227 Percentage of the requests served within a certain time (ms) 50% 15 66% 15 75% 15 80% 15 90% 27 95% 28 98% 29 99% 227 100% 227 (longest request)
Вы можете просто заметить, как увеличивается количество запросов в секунду с использованием флагов. В данном случае это, в частности, связано с использованием -H «Accept-Encoding: gzip , deflate, поскольку этот флаг указывает серверу Apache обслуживать запросы в формате gzipped .
Учитывая результаты Apache Bench
Несколько важных моментов необходимо учитывать, когда дело доходит до результатов Apache Bench. Это поможет нам разработать общую стратегию по устранению узких мест в нашем приложении и повышению его производительности.
Нам нужно запросов в секунду. Это дает нам представление о том, насколько хорошо работает настройка нашего веб-сервера; чем больше число, тем выше производительность. Затем следует время соединения (мс) и процент обработанных запросов. Возможно, вам придется изменить настройки вашего веб-сервера, чтобы изменить эти показатели на желаемую производительность.
Проверьте, есть ли ошибки в журналах ошибок Apache или используемого веб-сервера или (общих) журналах. Когда вы увеличите нагрузку, все начнет задыхаться: проблемы с памятью начнут возникать. Многие скрипты Python начнут падать, если они не написаны с учетом параллелизма.
Вам необходимо выяснить, какое критическое значение параллелизма выше, чем ваш веб-сервер дает сбой и / или время ожидания? Обычно это должно происходить на довольно высоком уровне параллелизма. Если это значение низкое, что-то не так, и вам нужно отрегулировать эти настройки ниже / выше.
Заключение
В этом уроке мы узнали, как Apache Bench можно использовать для нагрузочного тестирования любого веб-сайта или веб-приложения. Apache Bench может быть очень ценным инструментом для определения того, как следует улучшить настройку сервера веб-приложений, уменьшить узкие места и повысить производительность. Теперь, когда вы знакомы с базовым использованием Apache Bench, вы можете начать с создания новых планов тестирования для измерения производительности ваших приложений в различных сценариях.