Apache Bench je užitečný malý nástroj pro testování doby odezvy webové služby, a tím i výkonu webového serveru. Můžeme určit počet požadavků k odeslání, cílovou adresu URL, nastavit souběžnost, abychom jmenovali některá nastavení tohoto nástroje.
I když takové simulované pracovní zátěže nepovedou k přesně stejným datům jako provoz ve skutečném světě, vždy je dobré je před zahájením výroby otestovat. Možná bychom před nasazením nové verze aplikace mohli spustit testy na nové verzi a porovnat výsledky s předchozími testovacími daty, abychom zjistili, zda naše aplikace bude sloužit pomaleji nebo rychleji než předchozí verze. Díky dobře naplánovanému testování může tento nástroj ukázat možná úzká hrdla aplikace a může poskytnout body zájmu, kde bychom se měli podívat do našeho kódu za účelem možné optimalizace.
V tomto tutoriálu nainstalujeme Apache Bench na Red Hat Enterprise Linux 8 a také webový server Apache, s nímž lze spouštět některé testy.
V tomto tutoriálu se naučíte:
- Jak nainstalovat Apache Bench
- Jak nainstalovat webový server httpd a přidat základní obsah
- Jak spouštět jednoduché testy na webovém serveru
Spuštění testů výkonu proti místnímu webovému serveru pomocí Apache Bench.
Požadavky na software a použité konvence
Kategorie | Požadavky, konvence nebo použitá verze softwaru |
---|---|
Systém | Red Hat Enterprise Linux 8 |
Software | Apache Bench 2.3 |
Jiné | Privilegovaný přístup k vašemu systému Linux jako root nebo prostřednictvím sudo příkaz. |
Konvence | # – vyžaduje, aby dané linuxové příkazy byly spouštěny s právy root buď přímo jako uživatel root, nebo pomocí sudo příkaz$ – vyžaduje, aby dané linuxové příkazy byly spouštěny jako běžný neprivilegovaný uživatel |
Jak nainstalovat Apache bench na Redhat 8 krok za krokem
Apache Bench je k dispozici v základních softwarových zdrojích po povolení repozitářů správy předplatného spolu s Apache httpd
webový server. Abychom náš nástroj vyzkoušeli, přidáme na webový server základní obsah, statický i napsaný v php
.
- K instalaci Apache Bench, který je v
httpd-tools
balíčku, použijemednf
:# dnf install httpd-tools
- K vytvoření testovacího prostředí použijeme naše
ab
nástroj, nainstalujeme webový server s podporou php:# dnf install httpd php
- Přidáme statickou stránku HTML
/var/www/html/index.html
s následujícím obsahem:<html> <head> <title>Title of the webpage</title> </head> <body> <p>This is a simple html page.</p> </body> </html>
A další stránka, která má za následek stejný obsah, ale je napsána v php záměrně marnotratným způsobem. Soubor bude
/var/www/html/index.php
, s níže uvedeným obsahem:<?php echo "<html>\n"; echo "<head>\n"; echo "<title>Title of the webpage</title>\n"; echo "</head>\n"; echo "<body>\n"; echo "<p>This is a simple html page.</p>\n"; echo "</body>\n"; echo "</html>\n"; ?>
Všimněte si, že když poskytujeme statický text, potřebovali bychom pouze jedno
echo
, nebo vůbec žádné php. Tuto stránku jsme vytvořili pouze proto, abychom viděli rozdíl v době odezvy. - Můžeme spustit náš webový server:
# systemctl start httpd
- Nepotřebujeme
root
privilegia pro benchmarking. Pro první test spustímeab
oproti statické stránceindex.html
, poskytující 100 000 požadavků (-n) pro stránku v 10 souběžných vláknech (-c), v maximálním časovém rámci 60 sekund (-t). Na laboratorním stroji bude toto množství požadavků vyřízeno za jednu minutu, ale v závislosti na hardwaru to nemusí být dostatečné. Všimněte si také, že jsme eliminovali skutečný síťový provoz pomocí benchmarkingu z localhostu a tlačíme zátěž na spouštění požadavků a jejich obsluhu na stejném hardwaru.$ ab -t 60 -n 100000 -c 10 http://localhost/index.html This is ApacheBench, Version 2.3 <$Revision: 1826891
gt;
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 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Completed 100000 requests
Finished 100000 requestsServer Software: Apache/2.4.35
Server Hostname: localhost
Server Port: 80Document Path: /index.html
Document Length: 116 bytesConcurrency Level: 10
Time taken for tests: 19.556 seconds
Complete requests: 100000
Failed requests: 0
Total transferred: 39600000 bytes
HTML transferred: 11600000 bytes
Requests per second: 5113.63 [#/sec] (mean)
Time per request: 1.956 [ms] (mean)
Time per request: 0.196 [ms] (mean, across all concurrent requests)
Transfer rate: 1977.53 [Kbytes/sec] receivedConnection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 3
Processing: 0 2 0.8 2 26
Waiting: 0 1 0.7 1 26
Total: 0 2 0.8 2 26Percentage of the requests served within a certain time (ms)
50% 2
66% 2
75% 2
80% 2
90% 3
95% 3
98% 4
99% 5
100% 26 (longest request)
- Druhý test bude spuštěn se stejnou sadou parametrů, ale proti plýtvání php stránkou
index.php
.$ ab -t 60 -n 100000 -c 10 http://localhost/index.php This is ApacheBench, Version 2.3 <$Revision: 1826891
gt;
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 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Completed 100000 requests
Finished 100000 requestsServer Software: Apache/2.4.35
Server Hostname: localhost
Server Port: 80Document Path: /index2.php
Document Length: 116 bytesConcurrency Level: 10
Time taken for tests: 35.064 seconds
Complete requests: 100000
Failed requests: 0
Total transferred: 30700000 bytes
HTML transferred: 11600000 bytes
Requests per second: 2851.89 [#/sec] (mean)
Time per request: 3.506 [ms] (mean)
Time per request: 0.351 [ms] (mean, across all concurrent requests)
Transfer rate: 855.01 [Kbytes/sec] receivedConnection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 3
Processing: 1 3 1.2 3 27
Waiting: 0 3 1.2 3 27
Total: 1 3 1.3 3 28Percentage of the requests served within a certain time (ms)
50% 3
66% 4
75% 4
80% 4
90% 5
95% 6
98% 7
99% 7
100% 28 (longest request)
It isn't a big surprise what the results show. The static content is served much faster than the wasteful page that also need to go trough the php interpreter. And with this we have shown in a simple example how the Apache Bench tool can be used to gather statistics on the response time of our webservices.