Apache Bench - Confronto degli output

In questo capitolo confronteremo gli output con e senza flag. Vediamo come l'uso di flag appropriati può aumentare le prestazioni della tua applicazione web. Prima di ciò, dobbiamo capire come se la tua applicazione è semplice, potresti non notare la differenza. Come nel caso della nostra semplice applicazione, con flag e senza flag. Quindi eseguiremo lo stesso test conhttps://www.apache.org/ URL e vedi la differenza.

Testare la nostra applicazione senza flag

In questa sezione capiremo come testare la nostra applicazione senza flag.

$ ab -n 100 -c 10 http://127.0.0.1:8000/

Produzione

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 127.0.0.1 (be patient).....done


Server Software:        Rocket
Server Hostname:        127.0.0.1
Server Port:            8000

Document Path:          /
Document Length:        Variable

Concurrency Level:      10
Time taken for tests:   0.244 seconds
Complete requests:      100
Failed requests:        0
Non-2xx responses:      100
Keep-Alive requests:    0
Total transferred:      27700 bytes
HTML transferred:       6600 bytes
Requests per second:    2208.77 [#/sec] (mean)
Time per request:       4.527 [ms] (mean)
Time per request:       0.453 [ms] (mean, across all concurrent requests)
Transfer rate:          597.49 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1    2   0.7      2       3
Processing:     0    2   0.7      2       4
Waiting:        0    2   1.0      2       3
Total:          4    4   0.3      4       5

Percentage of the requests served within a certain time (ms)
  50%      4
  66%      4
  75%      5
  80%      5
  90%      5
  95%      5
  98%      5
  99%      5
 100%      5 (longest request)

Testare la nostra applicazione con i flag

In questa sezione capiremo come testare la nostra applicazione con i flag.

$ ab -l -r -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate"  http://127.0.0.1:8000/

Produzione

...
Requests per second:    2277.07 [#/sec] (mean)
Time per request:       4.392 [ms] (mean)
Time per request:       0.439 [ms] (mean, across all concurrent requests)
Transfer rate:          615.97 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1    2   0.7      2       3
Processing:     0    2   0.7      2       4
Waiting:        0    2   1.0      2       3
Total:          4    4   0.2      4       5

Percentage of the requests served within a certain time (ms)
  50%      4
  66%      4
  75%      4
  80%      4
  90%      5
  95%      5
  98%      5
  99%      5
 100%      5 (longest request)

Possiamo semplicemente notare che non c'è molta differenza tra le statistiche di output.

Test del sito Web dell'organizzazione Apache senza flag

Vediamo ora come testare il sito Web dell'organizzazione Apache senza flag.

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

Produzione

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:            80

Document Path:          /
Document Length:        58433 bytes

Concurrency Level:      10
Time taken for tests:   1.498 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      5877500 bytes
HTML transferred:       5843300 bytes
Requests per second:    66.74 [#/sec] (mean)
Time per request:       149.840 [ms] (mean)
Time per request:       14.984 [ms] (mean, across all concurrent requests)
Transfer rate:          3830.58 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       12  110 295.2     12    1012
Processing:    37   38   0.5     38      39
Waiting:       12   13   0.3     13      15
Total:         49  147 295.4     50    1051

Percentage of the requests served within a certain time (ms)
  50%     50
  66%     50
  75%     50
  80%     50
  90%    816
  95%   1050
  98%   1051
  99%   1051
 100%   1051 (longest request)

Test del sito Web dell'organizzazione Apache con i flag

Proviamo ora a testare il sito Web dell'organizzazione Apache con i flag.

$ ab -l -r -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate"  http://www.apache.org/

Produzione

...
Document Length:        Variable

Concurrency Level:      10
Time taken for tests:   0.357 seconds
Complete requests:      100
Failed requests:        0
Keep-Alive requests:    100
Total transferred:      1358510 bytes
HTML transferred:       1317700 bytes
Requests per second:    280.28 [#/sec] (mean)
Time per request:       35.678 [ms] (mean)
Time per request:       3.568 [ms] (mean, across all concurrent requests)
Transfer rate:          3718.41 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   3.7      0      12
Processing:    14   17  21.3     15     227
Waiting:       14   17  21.3     14     227
Total:         14   18  21.5     15     227

Percentage of the requests served within a certain time (ms)
  50%     15
  66%     15
  75%     15
  80%     15
  90%     27
  95%     28
  98%     29
  99%    227
 100%    227 (longest request)

Puoi semplicemente notare come la richiesta al secondo è aumentata con l'uso dei flag. Nella fattispecie, è particolarmente dovuto all'uso di-H "Accept-Encoding: gzip, deflate perché questo flag indica al server Apache di servire le richieste in gzipped formato.

Considerando i risultati del banco di Apache

Alcuni punti importanti devono essere considerati quando si tratta dei risultati di Apache Bench. Questo ci aiuterà a progettare la nostra strategia generale per rimuovere i colli di bottiglia nella nostra applicazione e migliorarne le prestazioni.

Abbiamo bisogno di richieste al secondo. Questo ci dà un'idea di come funziona bene la configurazione del nostro server web; maggiore è il numero, migliori sono le prestazioni. Poi vengono i tempi di connessione (ms) e la percentuale delle richieste servite. Potrebbe essere necessario modificare le impostazioni del server Web per modificare queste metriche in base alle prestazioni desiderate.

Verificare se sono presenti errori nei log degli errori del server Web di Apache o utilizzato o nei log (generali). Man mano che aumenterai il tuo carico, le cose inizieranno a soffocare: inizieranno a sorgere problemi di memoria. Molti script Python inizieranno a bloccarsi se non sono scritti pensando alla concorrenza.

Hai bisogno di scoprire qual è il valore critico di concorrenza al di sopra del quale il tuo server web si blocca e / o va in timeout? Normalmente questo dovrebbe accadere a un livello di concorrenza abbastanza alto. Se questo valore è basso, qualcosa non va ed è necessario regolare queste impostazioni più in basso / più in alto.

Conclusione

In questo tutorial abbiamo imparato come utilizzare Apache Bench per testare il carico di qualsiasi sito web o applicazione web. Apache Bench può essere uno strumento molto prezioso per determinare come migliorare la configurazione del server di applicazioni Web, ridurre i colli di bottiglia e aumentare le prestazioni. Ora che hai familiarità con l'utilizzo di base di Apache Bench, puoi iniziare creando nuovi piani di test per misurare le prestazioni delle tue applicazioni in vari scenari.