Znáte průměrnou dobu odezvy vašeho webu? Víte, kolik souběžných uživatelů váš web zvládne?
Zátěžové testování je nezbytné, aby webové aplikace poznaly kapacitu webu. Pokud si máte vybrat webový server, pak jedna z prvních věcí, kterou chcete udělat, je provést zátěžové testování a zjistit, který pro vás funguje dobře.
Benchmarking vám může pomoci při rozhodování;
- Který webový server funguje nejlépe
- Počet serverů, které potřebujete obsloužit x počet požadavků
- Která konfigurace vám poskytne nejlepší výsledky
- Které technologické sady fungují lépe
- Kdy bude váš web fungovat pomaleji nebo se rozpadne
Existuje několik online nástrojů k provedení zátěžového testu; pokud však hledáte interní řešení nebo chcete porovnávat pouze výkon webového serveru, můžete použít ApacheBench a alternativně některé z níže uvedených nástrojů.
Použil jsem webový server Apache & Nginx hostovaný na DigitalOcean otestovat to.
Table of Contents
ApacheBench
ApacheBench (ab) je program příkazového řádku s otevřeným zdrojovým kódem, který funguje s libovolným webovým serverem. V tomto příspěvku vysvětlím, jak nainstalovat tento malý program a provést zátěžový test pro porovnání výsledků.
Apache
Pojďme si ApacheBench nainstalovat pomocí příkazu yum.
yum install httpd-tools
Pokud již máte httpd-tools, můžete to ignorovat.
Nyní se podívejme, jak funguje pro 5000 požadavků se souběžností 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] ~]#
Jak tedy můžete vidět, Apache zpracoval 373 požadavků za sekundu a obsloužení všech požadavků trvalo celkem 13,389 sekund.
Nyní víte, že výchozí konfigurace může obsloužit tolik požadavků, takže když provedete jakékoli změny konfigurace, můžete provést test znovu, porovnat výsledky a vybrat ten nejlepší.
Nginx
Pojďme si otestovat, co jsme udělali pro Apache, abyste mohli porovnat, který z nich funguje lépe.
[[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] ~]#
PÁNI!
Viděl jsi to?
Nginx zpracoval 6593 požadavků za sekundu! Vítěz.
Takže pouhým porovnáním se dvěma webovými servery získáte představu, který z nich vybrat pro vaši webovou aplikaci.
Výše uvedený test je na CentOS 6.8, 64bit. Pro dosažení optimálních výsledků můžete vyzkoušet více kombinací verzí OS a webového serveru.
Nelíbí se vám ApacheBench z jakéhokoli důvodu? Žádný strach, existuje spousta dalších, které můžete použít k provedení načítání HTTP.
OBLEŽENÍ
OBLEŽENÍ je nástroj pro test zatížení HTTP podporovaný v systému UNIX. Do textového souboru můžete vložit více adres URL, proti kterým se načítají testy. Siege můžete nainstalovat pomocí yum.
# yum install siege
Spusťte test s 500 souběžnými požadavky po dobu 5 sekund.
[[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] ~]#
Abych rozepsal parametry.
-q – pro tiché spuštění (nezobrazení podrobností požadavku)
-t – běh po dobu 5 sekund
-c – 500 souběžných požadavků
Jak tedy vidíte, dostupnost je 100% a doba odezvy je 0,04 sekundy. Parametr zátěžového testu můžete upravit podle svého cíle.
Ali
Ali je relativně nový nástroj pro testování zátěže pro provádění analýzy v reálném čase. Podporuje více platforem k instalaci, včetně Dockeru.
Po instalaci spusťte ali, abyste viděli podrobnosti o použití.
[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]:~#
Jak vidíte výše, máte možnost odesílat HTTP hlavičky, trvání testu, limit rychlosti, časový limit a další. Udělal jsem rychlý test na etechblog.cz Tools a tady je výstup.
Zpráva je interaktivní a poskytuje podrobné informace o latenci.
Gobench
Gobench je napsán v jazyce Go a jednoduchý nástroj pro testování zátěže pro srovnání výkonu webového serveru. Podporuje více než 20 000 souběžných uživatelů, což ApacheBench nepodporuje.
Apache JMeter
JMeter je jedním z nejpopulárnějších open-source nástrojů pro měření výkonu webových aplikací. JMeter je Java aplikace a nejen webový server, ale můžete ji použít proti PHP, Java. ASP.net, SOAP, REST atd.
JMeter má slušné přátelské GUI a nejnovější verze 3.0 vyžaduje ke spuštění aplikace Java 7 nebo vyšší. Pokud je vaším cílem optimalizovat výkon webové aplikace, musíte JMeter vyzkoušet.
wrk
wrk je další moderní nástroj pro měření výkonu, který zatíží váš webový server a poskytne vám podrobnosti o latenci, požadavku za sekundu, přenosu za sekundu atd.
Pomocí wrk můžete určit spuštění zátěžového testu s počtem vláken.
Vezměme si příklad spuštění testu po dobu 5 minut s 500 souběžnými uživateli s 8 vlákny.
wrk –t8 –c500 -d300s http://localhost
Autokanón
Inspirován prací, autokanón je napsán v Node.js. Můžete jej používat programově, prostřednictvím API nebo samostatného nástroje. Vše, co potřebujete, je instalace NodeJS jako předpoklad.
Můžete ovládat řadu připojení, požadavků, trvání, pracovníky, časový limit, rychlost připojení a nabídnout spoustu možností pro srovnání vašich webových aplikací.
Curl-loader
curl-loader je napsán v C pro simulaci zatížení aplikací a podporuje SSL/TLS. Spolu s testem webové stránky můžete tento nástroj s otevřeným zdrojovým kódem použít také k provedení zatížení na serverech FTP.
Můžete vytvořit testovací plán s kombinací HTTP, HTTPS, FTP a FTPS v jediné dávkové konfiguraci.
httperf
The httperf je vysoce výkonný nástroj, který se zaměřuje na srovnávání na mikro a makro úrovni. Podporuje protokoly HTTP/1.1 a SSL.
Pokud máte očekávaný počet souběžných uživatelů a chcete otestovat, zda váš webový server dokáže obsloužit určitý počet požadavků, můžete použít následující příkaz.
httperf --server localhost --port 80 --num-conns 1000 --rate 100
Výše uvedený příkaz bude testovat se 100 požadavky za sekundu pro 1000 požadavků HTTP.
Tsung
Tsung je multiprotokolový distribuovaný nástroj pro zátěžové testování pro stres HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL server. Podporuje HTTP/1.0, HTTP/1.1 a soubory cookie jsou zpracovávány automaticky.
Generování zprávy je možné pomocí Tsung.
Závěr
Doufám, že výše uvedené nástroje pro srovnávání vám poskytnou představu o výkonu vašeho webového serveru a rozhodnou se, co bude pro váš projekt nejlepší.
Dále nezapomeňte sledovat výkon vašeho webu.