Introduzione

Apache Bench è uno strumento utilizzato per misurare le prestazioni di un server Web. Nonostante abbia "Apache" nel suo nome, può effettivamente essere utilizzato per testare qualsiasi tipo di server web. In questo tutorial, seguiremo i passaggi per utilizzare Apache Bench e come interpretare il suo rapporto sulle prestazioni di un web server.

Apache Bench funziona inviando quantità variabili di richieste HTTP al server Web e registrando i tempi di risposta. Può dirti quanta congestione può gestire il server prima che venga sopraffatto e le prestazioni diminuiscano.

Utilizzare l'account root oppure un utente con privilegi sudo.

Se il vostro intento è fare un benchmark del server in remoto continuate a leggere, altrimenti saltate il primo paragrafo "Connessione al Server" e leggere il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Come installare Apache Bench

Apache Bench fa parte del pacchetto apache2-utils, che può essere installato con il gestore pacchetti del sistema. Eseguire questi comandi.

Se Apache non è ancora installato sul sistema, installarlo con il seguente comando:

sudo dnf install httpd

Installare il pacchetto necessario per utilizzare Apache Bench:

sudo dnf install httpd-tools

Come usare Apache Bench

Per utilizzare Apache Bench è necessario conoscere il proprio hostname.

Per visualizzare il proprio hostname digitare il seguente comando:

hostname

Dovresti visualizzare un messaggio di output con il tuo hostname, ad esempio:

TEST-SERVER-1

La sintassi più semplice per utilizzare Apache Bench è la seguente:

ab TEST-SERVER-1/

Dovresti visualizzare un messaggio di output simile al seguente:

This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking TEST-SERVER-1 (be patient).....done


Server Software:        Apache/2.4.37
Server Hostname:        TEST-SERVER-1
Server Port:            80

Document Path:          /
Document Length:        328 bytes

Concurrency Level:      1
Time taken for tests:   0.003 seconds
Complete requests:      1
Failed requests:        0
Non-2xx responses:      1
Total transferred:      508 bytes
HTML transferred:       328 bytes
Requests per second:    314.17 [#/sec] (mean)
Time per request:       3.183 [ms] (mean)
Time per request:       3.183 [ms] (mean, across all concurrent requests)
Transfer rate:          155.86 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:     2    2   0.0      2       2
Waiting:        2    2   0.0      2       2
Total:          2    2   0.0      2       2

ab richiede la barra finale dopo il nome dell'host hostname/. Questo comando di base non è particolarmente utile senza opzioni aggiuntive, quindi includiamo alcuni parametri.

Apache Bench ha molte opzioni disponibili, ma alcune delle più utili sono:

  • -n (numero): usato per specificare il numero di richieste che ab dovrebbe inviare ad apache
  • -t (timeout): usato per specificare (in secondi) per quanto tempo ab dovrebbe continuare a inviare richieste
  • -c (concorrente): usato per specificare il numero di richieste simultanee che ab deve effettuare

Puoi provare queste opzioni al fine di simulare un traffico più realistico per il tuo server Web e osservare come si comporta sotto varie sollecitazioni, ad esempio:

ab -t 10 -n 10000 -c 100 TEST-SERVER-1/

Questo comando eseguirà il benchmark del nostro server Web per 10 secondi, inviando un massimo di 10.000 richieste totali e inviando contemporaneamente 100 di tali richieste.

Considerazioni

Ci sono alcune cose da considerare quando si utilizza Apache Bench. Quando un server riceve migliaia di richieste HTTP da una singola fonte in pochi secondi, molti firewall lo interpreteranno come un attacco denial of service e tenteranno di bloccare le connessioni ripetute per un po'.

Consigliamo solo di utilizzare Apache Bench su una rete locale e testare su host che controlli. Tuttavia, questa non è una simulazione perfetta del traffico reale.

Quando si connettono a un server Web da qualche parte nel mondo, gli utenti avranno diversi livelli di latenza e hops(il percorso che la loro connessione porta al server Web), che svolgono ruoli importanti nella velocità percepita del tuo sito Web. Inoltre, la tua macchina di prova (il sistema da cui stai eseguendo il comando ab) potrebbe essere un collo di bottiglia. Se si sospetta che il sistema non disponga delle risorse necessarie per avviare questo elevato numero di connessioni, è possibile verificare utilizzando il comando top per monitorare l'utilizzo della CPU e della memoria mentre ab sta eseguendo il test.

Se ricevi un errore Connection timed out, le tue connessioni probabilmente sono state bloccate da un firewall o il server Apache è stato travolto e non è stato in grado di gestire ulteriori richieste.

Interpretazione dei risultati di Apache Bench

Le prime righe forniscono solo informazioni generali sul server web. Le informazioni utili iniziano con la riga Time taken for tests.

Time taken for tests indica quanto tempo ha impiegato il comando ab per completare il test. Se non abbiamo specificato un timeout, questa riga ti dirà quanto tempo ci è voluto per completare l'invio del numero specificato di richieste. Dopo aver applicato le ottimizzazioni al tuo server Web, dovresti vedere una riduzione del tempo impiegato per il completamento dei test (quando non specifichi un timeout).

Complete requests indica quante delle richieste sono state inviate e restituite correttamente.

Failed requests indica quante richieste non sono state completate. Ovviamente vorrai vedere un numero molto piccolo, idealmente zero. Se questa riga riporta alcune richieste non riuscite, potrebbe indicare che il server Web è stato travolto e incapace di rispondere a tutte le richieste in tempo.

Total transferred e HTML transferred riportano quanti dati, in byte, sono stati inviati al server web.

Requests per second è la media di quante richieste il web server è stato in grado di gestire in un secondo. È utile per determinare le prestazioni del tuo server Web quando molti utenti accedono allo stesso contemporaneamente.

Time per request è il tempo medio impiegato per elaborare una richiesta. I valori sono espressi in millisecondi. Il secondo valore time per request  viene semplicemente moltiplicato per il valore di concorrenza.

Transfer rate è la velocità con cui è stato in grado di trasferire i dati, il che non dovrebbe comportare alcun tipo di collo di bottiglia in una rete locale. Se si esegue il test su Internet, i limiti di routing e larghezza di banda potrebbero influire su questo valore molto prima di Apache stesso.

La sezione Connection Times (ms) elenca i tempi di risposta per le diverse fasi delle richieste HTTP.

Connect indica il tempo impiegato da ab per stabilire una connessione con il web server.

Processing è la quantità di tempo impiegata da Apache a elaborare le richieste. Dato che ab non può effettivamente misurarlo, registra solo il tempo in cui una connessione è aperta dopo essere stata avviata.

Waiting è il tempo che ab deve attendere tra l'invio di una richiesta e la ricezione di una risposta dal server Web.

Total indica il tempo totale trascorso dall'avvio di una connessione al server, dalla ricezione di una risposta e infine dalla chiusura della connessione.

L'ultima metrica di Apache Bench Percentage offre uno sguardo più preciso al tempo medio di risposta del server Web ordinando i tempi di connessione in percentuali.

Conclusione

In questo articolo abbiamo visto come installare Apache Bench su CentOS 8 e utilizzarlo per testare le prestazioni di un web server. Abbiamo anche imparato a interpretare l'output di Apache Bench. Dopo aver ottimizzato ulteriormente il tuo server Web, esegui di nuovo Apache Bench e aspettati di vedere risultati migliori in termini di prestazioni, se sono stati apportati miglioramenti.