Apache Bench è un piccolo strumento utile per testare il tempo di risposta di un servizio web e quindi le prestazioni del server web. Possiamo specificare il numero di richieste da inviare, l'URL di destinazione, impostare la concorrenza, solo per nominare alcune delle impostazioni di questo strumento.
Sebbene tali carichi di lavoro simulati non restituiranno esattamente gli stessi dati del traffico nel mondo reale, è sempre una buona idea eseguire un test prima di passare alla produzione. Forse prima di distribuire una nuova versione dell'applicazione, potremmo eseguire i test sulla nuova versione e confrontare i risultati con i dati del test precedente per vedere se la nostra applicazione funzionerà più lentamente o più velocemente dell'ultima versione. Con test ben pianificati, questo strumento può mostrare i possibili colli di bottiglia dell'applicazione e può fornire punti di interesse in cui dovremmo esaminare il nostro codice per una possibile ottimizzazione.
In questo tutorial installeremo Apache Bench su Red Hat Enterprise Linux 8, oltre a un server Web Apache su cui eseguire alcuni test.
In questo tutorial imparerai:
- Come installare Apache Bench
- Come installare il server web httpd e aggiungere alcuni contenuti di base
- Come eseguire semplici test sul server web
Esecuzione di test delle prestazioni sul server web locale con Apache Bench.
Requisiti e convenzioni software utilizzati
Categoria | Requisiti, convenzioni o versione del software utilizzata |
---|---|
Sistema | Red Hat Enterprise Linux 8 |
Software | Apache Bench 2.3 |
Altro | Accesso privilegiato al tuo sistema Linux come root o tramite sudo comando. |
Convenzioni | # – richiede che i comandi linux dati vengano eseguiti con i privilegi di root direttamente come utente root o usando sudo comando$ – richiede che i comandi linux dati vengano eseguiti come un normale utente non privilegiato |
Come installare Apache Bench su Redhat 8 istruzioni passo passo
Apache Bench è disponibile nelle fonti software di base dopo aver abilitato i repository di gestione degli abbonamenti insieme ad Apache httpd
server web. Per provare il nostro strumento, aggiungeremo alcuni contenuti di base al server web, sia statici che scritti in php
.
- Per installare Apache Bench, che si trova in
httpd-tools
pacchetto, useremodnf
:# dnf install httpd-tools
- Per creare un ambiente di test utilizzeremo il nostro
ab
strumento attivo, installeremo un server web con supporto php:# dnf install httpd php
- Aggiungeremo una pagina HTML statica
/var/www/html/index.html
con il seguente contenuto:<html> <head> <title>Title of the webpage</title> </head> <body> <p>This is a simple html page.</p> </body> </html>
E un'altra pagina che risulta nello stesso contenuto, ma è scritta in php in modo intenzionalmente dispendioso. Il file sarà
/var/www/html/index.php
, con i seguenti contenuti:<?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"; ?>
Nota che poiché serviamo testo statico, avremmo bisogno solo di un
echo
, o nessun php affatto. Creiamo questa pagina solo per vedere la differenza nei tempi di risposta. - Possiamo avviare il nostro server web:
# systemctl start httpd
- Non abbiamo bisogno di
root
privilegi per il benchmarking. Per il primo test, eseguiremoab
contro la pagina staticaindex.html
, fornendo 100000 richieste (-n) per la pagina in 10 thread simultanei (-c), entro l'intervallo di tempo massimo di 60 secondi (-t). Sulla macchina del laboratorio questa quantità di richieste verrà servita in un minuto, ma a seconda dell'hardware potrebbe non essere sufficiente. Si noti inoltre che abbiamo eliminato il vero traffico di rete eseguendo il benchmarking da localhost e spingiamo il carico sia dell'esecuzione delle richieste che del servizio sullo stesso hardware.$ 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)
- Il secondo test verrà eseguito con lo stesso set di parametri, ma contro la pagina php dispendiosa
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.