9 инструментов для теста производительности веб-сервера

Нагрузочное тестирование необходимо для того, чтобы веб-приложения знали емкость веб-сайта. Если вы хотите выбрать веб-сервер, то первое, что вы должны сделать, это выполнить нагрузочное тестирование производительности веб-сервера и посмотреть, какой из них вам подходит.

Бенчмаркинг может помочь вам принять решение:

  • Какой веб-сервер работает лучше
  • Количество серверов, которое вам нужно для обслуживания x количество запросов
  • Какая конфигурация дает вам лучшие результаты

Для тестирования я использовал веб-сервер Apache и Nginx. Ну а если вы не знаете какой веб-сервер вам выбрать, советуем прочитать про сравнение Nginx и Apache

1. ApacheBench

ApacheBench (ab) - это программа командной строки с открытым исходным кодом, которая работает с любым веб-сервером. В этом посте я объясню, как установить эту небольшую программу и выполнить нагрузочное тестирование для сравнения результатов.

Apache

Давайте установим ApacheBench с помощью команды yum.

yum install httpd-tools

Если у вас уже есть httpd-tools, вы можете не устанавливать его.

Теперь давайте посмотрим, как он выполняет 5000 запросов с параллелизмом 500.

[root@lab ~]# ab -n 5000 -c 500 http://localhost:80/
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 localhost (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software:        Apache/2.2.15
Server Hostname:        localhost
Server Port:            80
Document Path:          /
Document Length:        4961 bytes
Concurrency Level:      500
Time taken for tests:   13.389 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Non-2xx responses:      5058
Total transferred:      26094222 bytes
HTML transferred:       25092738 bytes
Requests per second:    373.45 [#/sec] (mean)
Time per request:       1338.866 [ms] (mean)
Time per request:       2.678 [ms] (mean, across all concurrent requests)
Transfer rate:          1903.30 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0   42  20.8     41    1000
Processing:     0  428 2116.5     65   13310
Waiting:        0  416 2117.7     55   13303
Total:         51  470 2121.0    102   13378
Percentage of the requests served within a certain time (ms)
50%    102
66%    117
75%    130
80%    132
90%    149
95%    255
98%  13377
99%  13378
100%  13378 (longest request)
[root@lab ~]#

Итак, как вы можете видеть, Apache обработал 373 запроса в секунду, и общее количество запросов заняло 13,389 секунды.

Теперь вы знаете, что конфигурация по умолчанию может обслуживать эти многочисленные запросы, поэтому, когда вы вносите какие-либо изменения в конфигурацию, вы можете провести тест снова, чтобы сравнить результаты и выбрать лучший.

Nginx

Давайте сделаем тест, который мы сделали для Apache, чтобы вы могли сравнить, какой из них работает лучше.

[root@lab ~]# ab -n 5000 -c 500 http://localhost:80/
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 localhost (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software:        nginx/1.10.1
Server Hostname:        localhost
Server Port:            80
Document Path:          /
Document Length:        3698 bytes
Concurrency Level:      500
Time taken for tests:   0.758 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Total transferred:      19660000 bytes
HTML transferred:       18490000 bytes
Requests per second:    6593.48 [#/sec] (mean)
Time per request:       75.832 [ms] (mean)
Time per request:       0.152 [ms] (mean, across all concurrent requests)
Transfer rate:          25317.93 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    6  11.0      2      53
Processing:     5   19   8.2     17      53
Waiting:        0   18   8.2     16      47
Total:         10   25  17.4     18      79
Percentage of the requests served within a certain time (ms)
50%     18
66%     21
75%     21
80%     22
90%     69
95%     73
98%     75
99%     76
00%     79 (longest request)
[root@lab ~]#

ВАУ!  Nginx обрабатывает 6593 запроса в секунду.

Таким образом, сравнивая два веб-сервера, вы поймете, какой из них выбрать для вашего веб-приложения.

Выше тест был сделан на CentOS 6,8, 64 бит. Вы можете попробовать несколько комбинаций ОС и версии веб-сервера для достижения оптимальных результатов.

2. SIEGE

SIEGE - это утилита тестирования нагрузки HTTP, поддерживаемая в UNIX. Вы можете поместить несколько URL-адресов в текстовый файл, чтобы загрузить тест. Вы можете установить осаду используя yum.

yum install siege

Давайте запустим тест с 500 одновременными запросами в течение 5 секунд.

[root@lab ~]# siege -q -t 5S -c 500 http://localhost/
Lifting the server siege...      done.
Transactions:                       4323 hits
Availability:               100.00 %
Elapsed time:                       4.60 secs
Data transferred:        15.25 MB
Response time:                    0.04 secs
Transaction rate:       939.78 trans/sec
Throughput:                         3.31 MB/sec
Concurrency:                      37.97
Successful transactions:        4323
Failed transactions:                0
Longest transaction:            1.04
Shortest transaction:            0.00
[root@lab ~]#

Параметры:

  • -q: тихий запуск (не показывая детали запроса)
  • -t: запустить в течение 5 секунд
  • -c: 500 одновременных запросов

Итак, как видите, доступность составляет 100%, а время отклика - 0,04 секунды. Вы можете настроить параметры нагрузочного теста в зависимости от вашей цели.

3. Gobench

Gobench написан на языке Go и представляет собой простую утилиту нагрузочного тестирования для оценки производительности веб-сервера. Он поддерживает более 20 000 одновременно работающих пользователей, чего нет у ApacheBench.

4. Apache JMeter

JMeter - один из самых популярных инструментов с открытым исходным кодом для измерения производительности веб-приложений. JMeter - это Java-приложение, а не только веб-сервер, но вы можете использовать его для PHP, Java. ASP.net, SOAP, REST и т.д.

JMeter получил приличный дружественный графический интерфейс, а последняя версия 3.0 требует Java 7 или выше для запуска приложения. Вы должны попробовать JMeter, если ваша цель - оптимизировать производительность веб-приложения.

5. WRK

wrk - это еще один современный инструмент измерения производительности, который загружает ваш веб-сервер и дает вам задержку, количество запросов в секунду, скорость передачи в секунду и т.д.

С помощью wrk запускать нагрузочный тест с несколькими потоками.

Давайте рассмотрим пример выполнения теста в течение 5 минут с 500 одновременными пользователями с 8 потоками.

wrk –t8 –c500 -d300s http://localhost

6. HTTPLoad

Httpload может прочитать несколько URL-адресов из файла, или вы можете указать его в аргументе команды. Последняя версия поддерживает SSL / TLS, что означает, что вы можете запросить URL-адрес веб-страницы с поддержкой HTTPS (SSL).

При тестировании URL-адреса с поддержкой SSL у вас есть возможность указать шифр, и простая команда теста будет выглядеть следующим образом.

httpload -cipher AES256-SHA -parallel 200 -seconds 120 URL_LIST.txt

Чтобы лучше это понять, выше будет запущен тест против 200 одновременных пользователей в течение 2 минут.

7. Curl-loader

curl-loader написан на C для имитации загрузки приложения и поддерживает SSL / TLS. Наряду с тестированием веб-страницы, вы также можете использовать этот инструмент с открытым исходным кодом для загрузки FTP-серверов.

Вы можете создать план тестирования с сочетанием HTTP, HTTPS, FTP и FTPS в одной пакетной конфигурации.

8. httperf

Httperf является высокоэффективным инструментом, который фокусируется на микро и макро - бенчмарке уровня. Он поддерживает протоколы HTTP / 1.1 и SSL.

Если вы ожидали число одновременных пользователей и хотите проверить, может ли ваш запрос обслуживать номер запроса, используйте следующую команду.

httperf --server localhost --port 80 --num-conns 1000 --rate 100

Приведенная выше команда будет проверять 100 запросов в секунду на 1000 HTTP-запросов.

9. Tsung

Tsung - это многопротокольный инструмент распределенного тестирования, предназначенный для нагрузок на серверы HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL. Он поддерживает HTTP / 1.0, HTTP / 1.1, и файлы cookie обрабатываются автоматически.

Заключение

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