Знаете ли вы среднее время отклика вашего сайта? Знаете ли вы, сколько одновременных пользователей может обслуживать ваш сайт?
Нагрузочное тестирование необходимо для того, чтобы веб-приложения знали емкость веб-сайта. Если вы собираетесь выбрать веб-сервер, то первое, что вам нужно сделать, это выполнить нагрузочное тестирование и посмотреть, какой из них подходит вам лучше всего.
Сравнительный анализ может помочь вам принять решение;
- Какой веб-сервер работает лучше всего
- Количество серверов, необходимых для обслуживания x количество запросов
- Какая конфигурация дает наилучшие результаты
- Какие технологические стеки работают лучше
- Когда ваш сайт будет работать медленнее или сломается
Существует несколько онлайн-инструментов для проведения стресс-теста; однако, если вы ищете собственное решение или хотите оценить только производительность веб-сервера, вы можете использовать ApacheBench и, в качестве альтернативы, некоторые из перечисленных ниже инструментов.
Я использовал веб-сервер Apache и Nginx, размещенный на DigitalOcean чтобы проверить это.
Оглавление
ApacheBench
ApacheBench (ab) — это программа командной строки с открытым исходным кодом, которая работает с любым веб-сервером. В этом посте я объясню, как установить эту небольшую программу и выполнить нагрузочный тест для сравнения результатов.
Апачи
Давайте установим ApacheBench с помощью команды yum.
yum install httpd-tools
Если у вас уже есть httpd-tools, вы можете игнорировать это.
Теперь давайте посмотрим, как он работает для 5000 запросов с параллелизмом 500.
[[email protected] ~]# 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) [[email protected] ~]#
Итак, как вы можете видеть, Apache обработал 373 запроса в секунду, и общее количество запросов заняло 13,389 секунды.
Теперь вы знаете, что конфигурация по умолчанию может обслуживать такое количество запросов, поэтому, когда вы вносите какие-либо изменения в конфигурацию, вы можете повторить тест, чтобы сравнить результаты и выбрать лучший.
Nginx
Давайте проверим то, что мы сделали для Apache, чтобы вы могли сравнить, какой из них работает лучше.
[[email protected] ~]# 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) [[email protected] ~]#
ВОТ ЭТО ДА!
Ты это видел?
Nginx обработал 6593 запроса в секунду! Победитель.
Итак, вы видите, что просто сравнив два веб-сервера, вы получите представление о том, какой из них выбрать для вашего веб-приложения.
Приведенный выше тест выполняется на CentOS 6.8, 64-разрядная версия. Вы можете попробовать несколько комбинаций версии ОС и веб-сервера для достижения оптимальных результатов.
Не нравится ApacheBench по какой-либо причине? Не беспокойтесь, есть много других, которые вы можете использовать для загрузки HTTP.
ОСАДА
ОСАДА — это утилита нагрузочного теста HTTP, поддерживаемая в UNIX. Вы можете поместить несколько URL-адресов в текстовый файл для загрузки тестов. Вы можете установить siege с помощью yum.
# yum install siege
Давайте запустим тест с 500 одновременными запросами на 5 секунд.
[[email protected] ~]# 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 [[email protected] ~]#
Чтобы разбить параметры.
-q — запустить его тихо (не показывая подробности запроса)
-t — запустить 5 секунд
-c — 500 одновременных запросов
Как видите, доступность составляет 100%, а время отклика — 0,04 секунды. Вы можете настроить параметр нагрузочного теста в зависимости от вашей цели.
Али
Али — относительно новый инструмент нагрузочного тестирования для выполнения анализа в реальном времени. Он поддерживает несколько платформ для установки, включая Docker.
После установки запустите ali, чтобы увидеть подробности использования.
[email protected]:~# ali no target given Usage: ali [flags] <target URL> Flags: -b, --body string A request body to be sent. -B, --body-file string The path to file whose content will be set as the http request body. --debug Run in debug mode. -d, --duration duration The amount of time to issue requests to the targets. Give 0s for an infinite attack. (default 10s) -H, --header strings A request header to be sent. Can be used multiple times to send multiple headers. -k, --keepalive Use persistent connections. (default true) -M, --max-body int Max bytes to capture from response bodies. Give -1 for no limit. (default -1) -m, --method string An HTTP request method for each request. (default "GET") -r, --rate int The request rate per second to issue against the targets. Give 0 then it will send requests as fast as possible. (default 50) -t, --timeout duration The timeout for each request. 0s means to disable timeouts. (default 30s) -v, --version Print the current version. Examples: ali --duration=10m --rate=100 http://host.xz Author: Ryo Nakao <[email protected]> [email protected]:~#
Как вы можете видеть выше, у вас есть возможность отправлять заголовки HTTP, продолжительность теста, ограничение скорости, время ожидания и многое другое. Я сделал быстрый тест с помощью toadmin.ru Tools, и вот результат.
Отчет является интерактивным и предоставляет подробную информацию о задержке.
Гобенч
Гобенч написан на языке Go и представляет собой простую утилиту для нагрузочного тестирования для оценки производительности веб-сервера. Он поддерживает более 20 000 одновременных пользователей, чего нет у ApacheBench.
Apache JMeter
JMeter — один из самых популярных инструментов с открытым исходным кодом для измерения производительности веб-приложений. JMeter — это приложение на основе Java, а не только веб-сервер, но вы можете использовать его против PHP, Java. ASP.net, SOAP, REST и т. д.
JMeter получил приличный дружественный графический интерфейс, а последняя версия 3.0 требует Java 7 или выше для запуска приложения. Вы должны попробовать JMeter, если ваша цель — оптимизировать производительность веб-приложения.
работа
работа — это еще один современный инструмент измерения производительности, который загружает ваш веб-сервер и дает вам информацию о задержке, запросе в секунду, передаче в секунду и т. д.
С помощью wrk вы можете указать запуск нагрузочного теста с несколькими потоками.
Давайте возьмем пример запуска теста на 5 минут с 500 одновременными пользователями с 8 потоками.
wrk –t8 –c500 -d300s http://localhost
Автопушка
Вдохновленный работой, автопушка написан на Node.js. Вы можете использовать его программно, через API или отдельную утилиту. Все, что вам нужно, это предварительно установленный NodeJS.
Вы можете контролировать количество подключений, запросов, продолжительность, рабочих, время ожидания, скорость подключения и предлагать множество вариантов для тестирования ваших веб-приложений.
Curl-погрузчик
кудрявый загрузчик написан на C для имитации загрузки приложений и поддерживает SSL/TLS. Наряду с тестом веб-страницы вы также можете использовать этот инструмент с открытым исходным кодом для выполнения нагрузки на FTP-серверы.
Вы можете создать план тестирования с сочетанием HTTP, HTTPS, FTP и FTPS в одной пакетной конфигурации.
httperf
httperf — это высокопроизводительный инструмент, ориентированный на тесты на микро- и макроуровнях. Он поддерживает протоколы HTTP/1.1 и SSL.
Если у вас есть ожидаемое количество одновременных пользователей и вы хотите проверить, может ли ваш веб-сервер обслуживать количество запросов, вы можете использовать следующую команду.
httperf --server localhost --port 80 --num-conns 1000 --rate 100
Приведенная выше команда будет тестировать 100 запросов в секунду для 1000 HTTP-запросов.
Цунг
Цунг — это многопротокольный распределенный инструмент для стресс-тестирования, предназначенный для стресс-тестирования серверов HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL. Он поддерживает HTTP/1.0, HTTP/1.1, а файлы cookie обрабатываются автоматически.
Создание отчета возможно с Tsung.
Вывод
Я надеюсь, что приведенные выше инструменты сравнительного анализа дадут вам представление о производительности вашего веб-сервера и помогут решить, что лучше всего подходит для вашего проекта.
Далее, не забывайте следить за производительностью вашего сайта.