Лекция
Привет, Вы узнаете о том , что такое нагрузочное тестирование web-сервера при помощи ab apache http server benchmarking tool, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое нагрузочное тестирование web-сервера при помощи ab apache http server benchmarking tool , настоятельно рекомендую прочитать все из категории Качество и тестирование программного обеспечения. Quality Assurance..
Пока ваш веб-сервер работает стабильно и стабильно отдает посетителям запрошенный контент — все в порядке. Но задавали ли вы себе вопрос: а что будет, если нагрузка на сервер возрастет? Что, если количество запросов на единицу времени увеличится вдвое? Втрое? В десять раз? Как узнать ответ на это злободневное «а что если?». В сегодняшней заметке мы рассмотрим основы нагрузочного тестирования веб-серверов при помощи утилиты ab — Apache HTTP server benchmarking tool, инструмента, который позволит вам определить максимально возможное количество одновременных запросов, которые сможет обработать ваша инсталляция веб-сервера.
Утилита ab поставляется в комплекте с Apache, так что если он у вас установлен — у вас есть уже все необходимое. В сегодняшней заметке мы будем упражняться на установленном в конфигурации по умолчанию Apache 2.2.14 в Ubuntu Server 10.04.2 LTS. Конфигурацию оборудования (кому интересно — оно довольно слабенькое) и настроек Apache приводить не буду, ибо нет смысла в рамках данной статьи. Целью данной заметки является небольшой обзор утилиты ab, а не анализ производительности конкретного ПО на конкретном железе. В рамках примера произведем тест отдачи сервером:
Все файлы размещены в корне DocumentRoot сервера. Код PHP-сценария использовался такой:
1
|
phpinfo();
|
Чтобы снизить влияние фактора сетевых задержек, для выполнения тестов используйте систему, пропускная способность сетевого канала от которой до тестируемого сервера является максимально высокой.
Итак, начнем. Для начала давайте организуем нагрузку нашему серверу в одну тысячу последовательных запросов. Для указания числа запросов используется опция '-n'. Номер порта можно не указывать, если он не отличен от 80-го:
1
|
$ ab -n 1000 http://aserver.ashep:80/test.html
|
Итак, что у нас получилось (вывод привожу не полностью, опуская несущественные пока моменты). В процессе тестирования утилита будет сообщать вам о ходе работы:
1
2
3
4
5
6
7
8
9
10
11
12
|
Benchmarking aserver.ashep (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
|
Далее вы увидите информацию о версии ПО сервера, его имени, какой документ загружался и каков его размер:
1
2
3
4
5
6
|
Server Software: Apache/2.2.14
Server Hostname: aserver.ashep
Server Port: 80
Document Path: /test.html
Document Length: 177 bytes
|
И далее, собственно, результаты:
1
2
3
4
5
6
7
8
9
10
11
|
Concurrency Level: 1
Time taken for tests: 1.500 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 453000 bytes
HTML transferred: 177000 bytes
Requests per second: 666.58 [#/sec] (mean)
Time per request: 1.500 [ms] (mean)
Time per request: 1.500 [ms] (mean, across all concurrent requests)
Transfer rate: 294.88 [Kbytes/sec] received
|
Как видно:
Далее в выводе идет информация о времени, затраченном на сетевые подключения:
1
2
3
4
5
6
|
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 2
Processing: 1 1 0.7 1 13
Waiting: 1 1 0.5 1 8
Total: 1 1 0.7 1 14
|
И на обслуживание запросов сервером:
1
2
3
4
5
6
7
8
9
10
|
Percentage of the requests served within a certain time (ms)
50% 1
66% 1
75% 1
80% 1
90% 2
95% 3
98% 4
99% 5
100% 14 (longest request)
|
Как видим, сервер успешно справился с тысячей последовательных загрузок статического файла небольшого размера. Об этом говорит сайт https://intellect.icu . Давайте теперь посмотрим, как сервер поведет себя, если вся эта тысяча запросов будет направлена к нему одновременно, указав это при помощи опции '-c':
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ ab -n 1000 -c 1000 http://aserver.ashep:80/test.html
Benchmarking aserver.ashep (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
apr_socket_recv: Connection reset by peer (104)
Total of 804 requests completed
|
Здесь тест не смог быть завершен по причине того, что после одновременной отправки 804 запросов сервер перестал принимать входящие соединения. Опытным путем, снижая количество одновременных запросов, было установлено что безболезненно мой Apache в текущей конфигурации может обрабатывать примерно 300 одновременных не Keep-Alive запросов.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
$ ab -n 1000 -c 300 http://aserver.ashep:80/test.html
Server Software: Apache/2.2.14
Server Hostname: aserver.ashep
Server Port: 80
Document Path: /test.html
Document Length: 55716 bytes
Concurrency Level: 300
Time taken for tests: 13.658 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 55998000 bytes
HTML transferred: 55716000 bytes
Requests per second: 73.22 [#/sec] (mean)
Time per request: 4097.409 [ms] (mean)
Time per request: 13.658 [ms] (mean, across all concurrent requests)
Transfer rate: 4003.91 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 17 190.0 6 3015
Processing: 224 1659 2376.3 644 13644
Waiting: 212 1628 2360.6 621 13636
Total: 230 1677 2379.8 648 13650
Percentage of the requests served within a certain time (ms)
50% 648
66% 654
75% 668
80% 785
90% 7003
95% 7243
98% 7384
99% 7425
100% 13650 (longest request)
|
Естественно, с Keep-Alive запросами дело будет обстоять еще хуже, поскольку занимаемые Apache'м ресурсы сервера освобождаются не так быстро. Для выполнения теста с Keep-Alive-соединениями просто добавьте опцию '-k':
1
|
$ ab -k -n 1000 -c 1000 http://aserver.ashep:80/test.html
|
С работой скриптов дело, естественно обстоит иначе. Здесь уже серверу нужно не просто отдать вам файл, а запустить интерпретатор, дождаться от него вывода и вернуть вывод клиенту. Ну и, конечно, работа интерпретатора займет определенное число ресурсов системы, что также отразится на производительности сервера в целом.
Попробуем запросить наш простенький скрипт тысячу раз, делая 300 запросов одновременно:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
$ ab -n 1000 -c 300 http://aserver.ashep:80/test.php
Server Software: Apache/2.2.14
Server Hostname: aserver.ashep
Server Port: 80
Document Path: /test.php
Document Length: 55469 bytes
Concurrency Level: 300
Time taken for tests: 44.110 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 55660000 bytes
HTML transferred: 55469000 bytes
Requests per second: 22.67 [#/sec] (mean)
Time per request: 13232.931 [ms] (mean)
Time per request: 44.110 [ms] (mean, across all concurrent requests)
Transfer rate: 1232.28 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 198 934.7 0 9021
Processing: 295 5910 9113.3 2457 44098
Waiting: 227 5711 9149.6 2273 44039
Total: 301 6108 9102.0 2470 44106
Percentage of the requests served within a certain time (ms)
50% 2470
66% 2983
75% 4412
80% 5575
90% 14254
95% 32750
98% 33302
99% 33589
100% 44106 (longest request)
|
Как видим, сервер успешно справился с запросами, однако время их обработки существенно возросло, составив в среднем 44 миллисекунды на запрос, в то время как отдача небольшого HTML-файла примерно такого же размера составляла всего лишь 13 миллисекунд.
Прочтение данной статьи про нагрузочное тестирование web-сервера при помощи ab apache http server benchmarking tool позволяет сделать вывод о значимости данной информации для обеспечения качества и оптимальности процессов. Надеюсь, что теперь ты понял что такое нагрузочное тестирование web-сервера при помощи ab apache http server benchmarking tool и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Качество и тестирование программного обеспечения. Quality Assurance.
Комментарии
Оставить комментарий
Качество и тестирование программного обеспечения. Quality Assurance.
Термины: Качество и тестирование программного обеспечения. Quality Assurance.