Знаете ли средното време за отговор на уебсайта си? Знаете ли колко едновременни потребители може да обслужи вашият сайт?
Тестването на натоварването е от съществено значение за уеб приложенията, за да знаят капацитета на уебсайта. Ако трябва да изберете уеб сървъра, едно от първите неща, които искате да направите, е да извършите тестване на натоварването и да видите кой работи добре за вас.
Бенчмаркингът може да ви помогне да вземете решение;
- Кой уеб сървър работи най-добре
- Брой сървъри, които трябва да обслужите x брой заявки
- Коя конфигурация ви дава най-добри резултати
- Кои технологични стекове се представят по-добре
- Кога вашият сайт ще работи по-бавно или ще се повреди
Има няколко онлайн инструмента за извършване на стрес тест; ако обаче търсите вътрешно решение или искате да сравните само производителността на уеб сървъра, тогава можете да използвате ApacheBench и алтернативно някои от изброените по-долу инструменти.
Използвал съм Apache & Nginx уеб сървър, хостван на DigitalOcean да го тествам.
Съдържание
ApacheBench
ApacheBench (ab) е програма за команден ред с отворен код, която работи с всеки уеб сървър. В тази публикация ще обясня как да инсталирате тази малка програма и да извърша теста за натоварване, за да сравните резултатите.
Apache
Нека да инсталираме ApacheBench с помощта на команда yum.
yum install httpd-tools
Ако вече имате httpd-инструменти, можете да пренебрегнете това.
Сега нека видим как се представя за 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 адреса в текстов файл, за да заредите тестове. Можете да инсталирате обсада с помощта на 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 заглавки, продължителност на теста, ограничение на скоростта, време за изчакване и др. Направих бърз тест на pctechbg.net Tools и ето как изглежда резултатът.
Докладът е интерактивен и дава подробна информация за латентността.
Gobench
Gobench е написан на език 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 като предпоставка.
Можете да контролирате редица връзки, заявки, продължителност, работници, време на изчакване, скорост на свързване и да предлагате много опции за сравнение на вашите уеб приложения.
Товарач за къдрици
зареждане на къдрици е написан на C, за да симулира натоварването на приложението и поддържа SSL/TLS. Заедно с теста на уеб страницата можете също да използвате този инструмент с отворен код за извършване на натоварване на FTP сървъри.
Можете да създадете план за тестване с комбинация от HTTP, HTTPS, FTP и FTPS в една пакетна конфигурация.
httperf
The 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 и бисквитките се обработват автоматично.
Генерирането на отчет е възможно с Tsung.
Заключение
Надявам се, че горните инструменти за сравнителен анализ ви дават представа за производителността на вашия уеб сървър и ще решите какво работи най-добре за вашия проект.
След това не забравяйте да наблюдавате ефективността на уебсайта си.