Apache ab: spiegare l'output


31

Mi sono guardato intorno e non sono riuscito a trovare alcuna spiegazione dettagliata dell'output. La maggior parte è davvero facile da capire, ma c'è una parte che mi confonde:

Time per request:       109537.505 [ms] (mean)
Time per request:       109.538 [ms] (mean, across all concurrent requests)

Ciò significa - per me - che se si misura attraverso tutte le richieste simultanee (qualunque cosa ciò significhi), le richieste vengono improvvisamente restituite 100 volte più velocemente. Perché il tempo per richiesta cambierebbe così tanto? Questo non ha senso.

Esiste una spiegazione dettagliata di questa e di altre parti dell'output ab?

Risposte:


53

Se la concorrenza è impostata su 1, non c'è alcuna differenza tra questi due. Inizia a importare quando hai eseguito più di 1 richiesta contemporaneamente.

Diamo un'occhiata a un esempio di ciò che ottengo sul mio localhost:

ab -c 1 -n 1000 http://localhost/

darà:

Time taken for tests:   3.912 seconds
Time per request:       3.912 [ms] (mean)
Time per request:       3.912 [ms] (mean, across all concurrent requests)

Ciò significa che sono stati necessari 3,912 secondi per eseguire 1000 richieste una per una. Quindi una singola richiesta ha richiesto 3,912 secondi / 1000 = 3,912 ms in media.

Ora rafforziamo un po 'il livello di concorrenza:

ab -c 10 -n 1000 http://localhost/

Time taken for tests:   0.730 seconds
Time per request:       7.303 [ms] (mean)
Time per request:       0.730 [ms] (mean, across all concurrent requests)

Questa volta invece di 3,912 secondi abbiamo bisogno solo di 0,730 secondi per portare a termine il lavoro. Abbiamo eseguito 1000 richieste in 0,730 secondi, quindi una richiesta richiederebbe in media 0,730 secondi / 1000 = 0,730 ms (ultima riga). Ma la situazione è leggermente diversa, poiché ora stiamo eseguendo 10 richieste contemporaneamente. Quindi in effetti il nostro numero qui non riflette il tempo reale necessario per il completamento di una richiesta . 0.730 ms * 10 (numero di richieste simultanee) = 7.303 ms. Questo è il tempo impiegato in media per il completamento di una singola richiesta se è stata eseguita in modo non simultaneo (o più correttamente, in modo isolato al livello di concorrenza corrente).

L'ultimo numero che vedi (0,730 ms) viene usato per dire approssimativamente di quanto aumenterebbe il tempo totale se tu aggiungessi 1 richiesta ( -n 1001) usando l'attuale livello di concorrenza -c 10(almeno almeno teoricamente è così).

7.303 ms offre una panoramica della durata di una singola richiesta isolata.

La modifica che vedi tra esempio -c 1e -c 10:

[-c 1 ]: Time per request:       3.912 [ms] (mean)
[-c 10]: Time per request:       7.303 [ms] (mean)

significa che una singola richiesta viene eseguita più velocemente se è l'unica ad essere eseguita -c 1. Se ci sono più richieste in -c 10competizione per le risorse, una singola richiesta richiederà più tempo per essere completata. Ma se si prende in considerazione il fatto che si stanno eseguendo 10 di tali richieste contemporaneamente, in questo 7.303 ms si gestiscono 10 richieste invece di 1.

Quindi, come misura del ritardo per una singola richiesta , i 7.303 ms sono più utili. Ma come misura delle prestazioni - 0,730 ms è più significativo. Infatti, con un valore di 0,730 ms <3,912 ms, vedrai che sarai in grado di servire più richieste al secondo su aggregato se consenti 10 richieste simultanee.

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.