Test di carico con AB ... richieste false non riuscite (lunghezza)


209

Per eseguire alcuni test di carico, per mia curiosità, sul mio server ho eseguito:

ab -kc 50 -t 200 http://localhost/index.php

Questo apre 50 connessioni keep-alive per 200 secondi e sbatte il mio server con richieste di index.php

Nei miei risultati, ottengo:

Concurrency Level:      50
Time taken for tests:   200.007 seconds
Complete requests:      33106
Failed requests:        32951
   (Connect: 0, Receive: 0, Length: 32951, Exceptions: 0)
Write errors:           0
Keep-Alive requests:    0
Total transferred:      1948268960 bytes
HTML transferred:       1938001392 bytes
Requests per second:    165.52 [#/sec] (mean)
Time per request:       302.071 [ms] (mean)
Time per request:       6.041 [ms] (mean, across all concurrent requests)
Transfer rate:          9512.69 [Kbytes/sec] received

Notare le richieste "non riuscite" 32951. Non riesco a capirlo.

Mentre il test era in esecuzione, sono stato in grado di accedere perfettamente al mio sito Web dal mio computer di casa, anche se i tempi di caricamento della pagina nella parte inferiore della pagina sono stati riportati come .5 invece del solito .02. Tuttavia non ho mai avuto una richiesta fallita.

Quindi perché AB sta segnalando che la metà delle connessioni fallisce? E cosa significa "Lunghezza:" in quel contesto?


Il tuo sito web ha un bilanciamento del carico? Vedi il mio post sul blog sui test di carico con bilanciamento del carico che potrebbe spiegare la situazione "funziona per me" nei test di carico.
Patrick Lightbody,

Risposte:


361

Non importa. Il "fallimento di lunghezza" indica semplicemente che circa la metà del tempo la lunghezza della risposta era diversa.

Poiché i contenuti sono dinamici, è probabilmente l'identificatore di sessione o qualcosa del genere.


8
Ehi, ho appena incontrato lo stesso "problema" e sono contento che questa risposta fosse qui. Grazie!
Richard Hurt,

2
Grazie per la risposta, avevo esattamente lo stesso dubbio.
Saiyine,

63
Sì, due anni dopo questa risposta è ancora molto utile.
Sergi,

11
Non essere troppo veloce per attribuire questo a discrepanze di lunghezza del contenuto variabile. ab non segnala il codice di stato HTTP 500 come errori nel suo riepilogo. Il motivo della mancata corrispondenza della lunghezza potrebbe essere un errore reale. Puoi usare -v 4 per ottenere maggiori informazioni (meglio eseguire il pipe su un file in quanto ci saranno molte stampe).
Tal Lev-Ami,

3
In realtà è spiegato nel manuale ab qui httpd.apache.org/docs/current/programs/ab.html "Se la lunghezza del documento cambia durante il test, la risposta viene considerata un errore."
Joeахар Joe,

132

Per descrivere il problema in altre parole:

Lo strumento di benchmarking di apache (ab) presuppone che la lunghezza del contenuto della risposta sarà la stessa durante l'intero test. Memorizza la lunghezza del contenuto della prima risposta. Se una qualsiasi delle ulteriori risposte ha una lunghezza del contenuto diversa, si traducono in "errori di lunghezza".

La seguente segnalazione di bug di apache sembra confermare che: ASF Bug 42040

Riepilogo : se stai offrendo contenuti di lunghezza variabile, probabilmente dovresti ignorare questo tipo di errori di richiesta ab.

Modifica : recentemente ho notato che il abcomando ha una nuova opzione (almeno per me):

-l   Accept variable document length (use this for dynamic pages)

Posso vederlo in una versione 2.3 <$ Revisione: 1528965 $> ma non riesco a vederlo in una versione 2.3 <$ Revisione: 655654 $> , quindi è stato probabilmente aggiunto relativamente di recente.


4
Per chiunque su un Mac, è probabile che la tua versione di ab sia dietro e -l non ci vorrà. Puoi installarlo dal sorgente o tramite homebrew, ma "brew install ab" non funziona perché fa parte del pacchetto apache - puoi installarlo con "brew install homebrew / apache / ab".
netpoetica,

8

Mi spiace di risorgere una vecchia domanda, ma è stata la prima ad apparire su Google. A volte l'errore di lunghezza riportato da ab potrebbe essere stato causato da un problema reale: se la connessione è chiusa sul lato server prima che il numero totale di byte dichiarati nell'intestazione Content-Length non sia stato ricevuto dal client. Ciò può accadere se ci sono altre parti tra il client e il server, ad esempio ingenui bilanciatori del carico realizzati a mano (il mio caso).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.