Apache Bench - Configurazione dell'ambiente

In questo capitolo, ti guideremo come configurare il tuo ambiente per Apache Bench sul tuo VPS.

Requisito del sistema

  • Memory - 128 MB

  • Disk Space - Nessun requisito minimo

  • Operating System - Nessun requisito minimo

Installazione di Apache Bench

Apache Bench è un'applicazione autonoma e non ha dipendenze dall'installazione del server Web Apache. Quello che segue è un processo in due fasi per installare Apache Bench.

Step 1 - Aggiorna il database dei pacchetti.

# apt-get update

Si noti che il simbolo # prima di un comando da terminale significa che l'utente root sta emettendo quel comando.

Step 2 - Installa il pacchetto apache2 utils per ottenere l'accesso ad Apache Bench.

# apt-get install apache2-utils

Apache Bench è ora installato. Se vuoi testare un'applicazione web ospitata sullo stesso VPS, allora è sufficiente installare solo il server web Apache -

# apt-get install apache2

Essendo un'utilità Apache, Apache Bench viene installato automaticamente durante l'installazione del server Web Apache.

Verifica dell'installazione da banco di Apache

Vediamo ora come verificare l'installazione da banco di Apache. Il codice seguente aiuterà a verificare l'installazione:

# ab -V

Output

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

Quando vedi l'output del terminale sopra, significa che hai installato con successo Apache Bench.

Creazione di un utente Sudo privilegiato

Dal punto di vista della sicurezza, è considerata una buona pratica per l'amministratore di sistema creare un utente sudo invece di lavorare come root. Creeremo un utente di prova, denominato test, per lo scopo:

# useradd -m -d /home/test -g sudo test

Impostiamo la password per il nuovo utente -

# passwd test

Il sistema richiederà una nuova password per il test utente. È possibile immettere una semplice password poiché stiamo solo testando e non distribuendo sul server di produzione. Di solito il comando sudo ti chiederà di fornire la password utente sudo; si consiglia di non utilizzare password complicate poiché il processo diventa macchinoso.

Output

Enter new UNIX password:
Retype new UNIX password:   
passwd: password updated successfully

Test del sito web Apache.org

In questa sezione, testeremo il sito Web Apache.org. Passiamo prima al test utente sudo -

# su test

Per cominciare, testeremo il sito Web dell'organizzazione Apache, https://www.apache.org/. Per prima cosa eseguiremo il comando, quindi comprenderemo l'output -

$ ab -n 100 -c 10 https://www.apache.org/

Qui -nè il numero di richieste da eseguire per la sessione di benchmarking. L'impostazione predefinita è eseguire solo una singola richiesta che di solito porta a risultati di benchmarking non rappresentativi.

E -cè la concorrenza e denota il numero di più richieste da eseguire contemporaneamente. L'impostazione predefinita è una richiesta alla volta.

Quindi, in questo test, Apache Bench effettuerà 100 richieste con concorrenza 10 al server dell'organizzazione Apache.

Output

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

Benchmarking www.apache.org (be patient).....done

Server Software:        Apache/2.4.7
Server Hostname:        www.apache.org
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256

Document Path:          /
Document Length:        58769 bytes

Concurrency Level:      10
Time taken for tests:   1.004 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      5911100 bytes
HTML transferred:       5876900 bytes
Requests per second:    99.56 [#/sec] (mean)
Time per request:       100.444 [ms] (mean)
Time per request:       10.044 [ms] (mean, across all concurrent requests)
Transfer rate:          5747.06 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       39   46  30.9     41     263
Processing:    37   40  21.7     38     255
Waiting:       12   15  21.7     13     230
Total:         77   86  37.5     79     301

Percentage of the requests served within a certain time (ms)
  50%     79
  66%     79
  75%     80
  80%     80
  90%     82
  95%     84
  98%    296
  99%    301
 100%    301 (longest request)

Dopo aver eseguito il nostro primo test, sarà facile riconoscere lo schema di utilizzo di questo comando che è il seguente:

# ab [options .....]  URL

dove,

  • ab - Comando Apache Bench

  • options - flag per attività particolari che vogliamo eseguire

  • URL - URL del percorso che vogliamo testare

Comprensione dei valori di output

Dobbiamo comprendere le diverse metriche per comprendere i vari valori di output restituiti da ab. Ecco l'elenco:

  • Server Software - È il nome del server web restituito nell'intestazione HTTP del primo ritorno riuscito.

  • Server Hostname - È l'indirizzo DNS o IP fornito sulla riga di comando.

  • Server Port- È la porta a cui ab si connette. Se non viene fornita alcuna porta sulla riga di comando, il valore predefinito sarà 80 per http e 443 per https.

  • SSL/TLS Protocol- Questo è il parametro del protocollo negoziato tra il client e il server. Questo verrà stampato solo se viene utilizzato SSL.

  • Document Path - Questo è l'URI della richiesta analizzato dalla stringa della riga di comando.

  • Document Length- È la dimensione in byte del primo documento restituito con successo. Se la lunghezza del documento cambia durante il test, la risposta è considerata un errore.

  • Concurrency Level - Questo è il numero di client simultanei (equivalente ai browser Web) utilizzati durante il test.

  • Time Taken for Tests - Questo è il tempo impiegato dal momento in cui viene creata la prima connessione socket al momento in cui viene ricevuta l'ultima risposta.

  • Complete Requests - Il numero di risposte ricevute con successo.

  • Failed Requests- Il numero di richieste considerate non riuscite. Se il numero è maggiore di zero, verrà stampata un'altra riga che mostra il numero di richieste non riuscite a causa di connessione, lettura, lunghezza del contenuto errata o eccezioni.

  • Total Transferred- Il numero totale di byte ricevuti dal server. Questo numero è essenzialmente il numero di byte inviati in rete.

  • HTML Transferred- Il numero totale di byte del documento ricevuti dal server. Questo numero esclude i byte ricevuti nelle intestazioni HTTP

  • Requests per second- Questo è il numero di richieste al secondo. Questo valore è il risultato della divisione del numero di richieste per il tempo totale impiegato.

  • Time per request- Il tempo medio impiegato per richiesta. Il primo valore viene calcolato con la formula concurrency * timesaken * 1000 / done mentre il secondo valore viene calcolato con la formula timesaken * 1000 / done

  • Transfer rate - La velocità di trasferimento calcolata dalla formula totalread / 1024 / timeaken.

Analisi rapida dell'output del test di carico

Dopo aver appreso le intestazioni dei valori di output dal comando ab, proviamo ad analizzare e comprendere i valori di output per il nostro test iniziale -

  • L'organizzazione Apache utilizza il proprio software per server Web: Apache (versione 2.4.7)

  • Il server è in ascolto sulla porta 443 a causa di https. Se fosse stato http, sarebbe stato 80 (predefinito).

  • I dati totali trasferiti sono 58769 byte per 100 richieste.

  • Test completato in 1.004 secondi. Non ci sono richieste fallite.

  • Richieste al secondo - 99,56. Questo è considerato un numero abbastanza buono.

  • Tempo per richiesta: 100,444 ms (per 10 richieste simultanee). Quindi, in tutte le richieste, è 100,444 ms / 10 = 10,044 ms.

  • Velocità di trasferimento - 1338,39 [Kbyte / sec] ricevuti.

  • Nelle statistiche sui tempi di connessione è possibile osservare che molte richieste hanno dovuto attendere alcuni secondi. Ciò potrebbe essere dovuto al server Web Apache che mette le richieste in coda di attesa.

Nel nostro primo test, avevamo testato un'applicazione (ad esempio, www.apache.org) ospitata su un server diverso. Nella parte successiva del tutorial, testeremo le nostre applicazioni web di esempio ospitate sullo stesso server da cui eseguiremo gli ab test. Questo è per la facilità di apprendimento e scopo dimostrativo. Idealmente, il nodo host e il nodo di test dovrebbero essere diversi per una misurazione accurata.

Per imparare meglio ab, dovresti confrontare e osservare come variano i valori di output per i diversi casi mentre andiamo avanti in questo tutorial.

Tracciare l'output di Apache Bench

Qui tracceremo il risultato rilevante per vedere quanto tempo impiega il server all'aumentare del numero di richieste. Per questo, aggiungeremo il file-g opzione nel comando precedente seguita dal nome del file (qui out.data) in cui verranno salvati i dati di output ab -

$ ab -n 100 -c 10 -g out.data https://www.apache.org/

Vediamo ora il file out.data prima di creare una trama -

$ less out.data

Output

starttime       seconds ctime   dtime   ttime   wait
Tue May 30 12:11:37 2017        1496160697      40      38      77      13
Tue May 30 12:11:37 2017        1496160697      42      38      79      13
Tue May 30 12:11:37 2017        1496160697      41      38      80      13
...

Vediamo ora di comprendere le intestazioni di colonna nel file out.data file -

  • starttime - Questa è la data e l'ora in cui è iniziata la chiamata.

  • seconds - Come starttime ma nel formato timestamp Unix (date -d @ 1496160697 restituisce l'output starttime).

  • ctime - Questo è il tempo di connessione.

  • dtime - Questo è il tempo di elaborazione.

  • ttime - Questo è il tempo totale (è la somma di ctime e dtime, matematicamente ttime = ctime + dtime).

  • wait - Questo è il tempo di attesa.

Per una visualizzazione pittorica di come questi più elementi sono correlati tra loro, dai un'occhiata alla seguente immagine:

Se stiamo lavorando sul terminale o dove la grafica non è disponibile, gnuplotè un'ottima opzione. Lo capiremo rapidamente eseguendo i seguenti passaggi.

Installiamo e lanciamo gnuplot -

$ sudo apt-get install gnuplot  
$ gnuplot

Output

G N U P L O T
Version 4.6 patchlevel 6    last modified September 2014
Build System: Linux x86_64

Copyright (C) 1986-1993, 1998, 2004, 2007-2014
Thomas Williams, Colin Kelley and many others

gnuplot home:     http://www.gnuplot.info
faq, bugs, etc:   type "help FAQ"
immediate help:   type "help"  (plot window: hit 'h')

Terminal type set to 'qt'
gnuplot>

Dato che stiamo lavorando sul terminale e supponiamo che la grafica non sia disponibile, possiamo scegliere il terminale stupido che fornirà l'output in ASCII sul terminale stesso. Questo ci aiuta a farci un'idea di come appare la nostra trama con questo rapido strumento. Prepariamo ora il terminale per il grafico ASCII.

gnuplot> set terminal dumb

Output

Terminal type set to 'dumb'
Options are 'feed  size 79, 24'

Poiché il nostro terminale gnuplot è ora pronto per il grafico ASCII, tracciamo i dati dal file out.data file -

gnuplot> plot "out.data" using 9  w l

Output

1400 ++-----+------+-----+------+------+------+------+-----+------+-----++
       +      +      +     +      +      +      +"out.data" using 9 ****** +
       |                                                                   |
  1200 ++                       ********************************************
       |     *******************                                           |
  1000 ++    *                                                            ++
       |     *                                                             |
       |     *                                                             |
   800 ++   *                                                             ++
       |    *                                                              |
       |    *                                                              |
   600 ++   *                                                             ++
       |    *                                                              |
       |    *                                                              |
   400 ++   *                                                             ++
       |    *                                                              |
   200 ++   *                                                             ++
       |    *                                                              |
       +****  +      +     +      +      +      +      +     +      +      +
     0 ++-----+------+-----+------+------+------+------+-----+------+-----++
       0      10     20    30     40     50     60     70    80     90    100

Abbiamo tracciato il ttime, tempo totale (in ms) dalla colonna 9, rispetto al numero di richieste. Possiamo notare che per le richieste dieci iniziali, il tempo totale è stato di quasi 100 ms, per i prossimi 30 richieste (da 10 ° a 40 ° ), ha aumentato a 1100 ms, e così via. La trama deve essere diversa a seconda del tuoout.data.