2009-09-13 8 views
16

sto cercando di capire come utilizzare ApacheBench e confrontare il mio sito web. Ho installato il progetto del sito predefinito (è ASP.NET MVC ma per favore non mettere fine alla lettura se non sei una persona .NET).Qualcuno può spiegare cosa significano questi risultati di ApacheBench?

Non ho cambiato nulla. Aggiungi un nuovo progetto. Impostare la confurazione su RELEASE. Esegui senza Debug. (quindi è in modalità LIVE). Sì, questo è con il web server integrato, non con il livello di produzione IIS o Apache o altro.

Quindi, ecco i risultati: -

C:\Temp>ab -n 1000 -c 1 http://localhost:50035/ 
This is ApacheBench, Version 2.3 <$Revision: 655654 $> 
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ 
Licensed to The Apache Software Foundation, http://www.apache.org/ 

Benchmarking localhost (be patient) 
Completed 100 requests 
Completed 200 requests 
Completed 300 requests 
Completed 400 requests 
Completed 500 requests 
Completed 600 requests 
Completed 700 requests 
Completed 800 requests 
Completed 900 requests 
Completed 1000 requests 
Finished 1000 requests 


Server Software:  ASP.NET 
Server Hostname:  localhost 
Server Port:   50035 

Document Path:  /
Document Length:  1204 bytes 

Concurrency Level:  1 
Time taken for tests: 2.371 seconds 
Complete requests:  1000 
Failed requests:  0 
Write errors:   0 
Total transferred:  1504000 bytes 
HTML transferred:  1204000 bytes 
Requests per second: 421.73 [#/sec] (mean) 
Time per request:  2.371 [ms] (mean) 
Time per request:  2.371 [ms] (mean, across all concurrent requests) 
Transfer rate:   619.41 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 0 1.1  0  16 
Processing:  0 2 5.5  0  16 
Waiting:  0 2 5.1  0  16 
Total:   0 2 5.6  0  16 

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

C:\Temp> 

Ora, io non sono sicuro esattamente quello che dovrebbe essere guardando.

In primo luogo, I dopo il numero di richieste al secondo. Quindi, se abbiamo un requisito per gestire 300 req/sec, allora è questo che dice che gestisce e la media di 421 req è un secondo?

In secondo luogo, qual è la ragione per aggiungere più concorrenti? Come in, se ho 1000 colpi su 1 simultaneo, in che modo differisce da 500 su 2 concorrenti? E 'per verificare se c'è un codice che blocca altre richieste?

Infine, c'è qualcosa di importante che mi è sfuggito dai risultati di cui dovrei prendere atto?

Grazie :)

risposta

16

qual è la ragione per l'aggiunta di ulteriori concorrente? Ad esempio, se ho 1000 hit su su 1, in che modo differisce da a 500 su 2 simultaneamente? È possibile testare se c'è un codice che blocca altre richieste ?

È un po 'che, sì: la vostra applicazione sta probabilmente facendo cose in cui la concorrenza può portare problemi.

Un paio di esempi:

  • una pagina sta tentando di accedere a un file - bloccandolo nel processo; significa che se un'altra pagina deve accedere allo stesso file, dovrà aspettare che la prima pagina abbia finito di lavorare con essa.
  • proprio la stessa cosa per l'accesso al database: se una pagina è la scrittura in un database, c'è una sorta di MECCANISMI bloccaggio (sia esso basato su tabelle, o una riga a base di, o qualsiasi altra cosa, a seconda del vostro DBMS)

Il test con una concorrenza di uno è OK ... Finché il tuo sito Web non avrà mai più di un utente allo stesso tempo; che non è del tutto realistico, spero per te.


Bisogna pensare a quanti utenti saranno sul posto, allo stesso tempo, quando è in produzione - e regolare la concorrenza; Basta ricordare che 5 utenti contemporaneamente sul vostro sito non significa che devi provare con una concorrenza di 5 con ab:

  • utenti reali potranno attendere un paio di secondi tra ogni richiesta (tempo di leggere il pagina, fare clic su un collegamento, ...)
  • ab non aspetta affatto: ogni volta che una pagina viene caricata (ovvero, una richiesta è finita), viene lanciata un'altra richiesta!


Inoltre, altre due cose:

  • ab solo test per una pagina - utenti reali potranno navigare su tutto il sito, che potrebbe causare problemi di concorrenza che non avrebbe dovuto durante la prova di un solo page
  • ab carica solo una pagina: non richiede risorse esterne (si pensi CSS, immagini, JS, ...); il che significa che avrai molte altre richieste, anche se non molto costose, quando il tuo sito è in produzione.

Come sidenote: si potrebbe desiderare di dare un'occhiata in altri strumenti, che possono fare test molto più completi, come siege, Jmeter, o OpenSTA: ab è davvero bello quando si vuole misurare se qualcosa che hai fatto sta ottimizzando la tua pagina o no; ma se vuoi simulare l'uso "reale" del tuo sito, quelli sono molto più adattati.

8

Sì, se vuoi sapere quante richieste al secondo il tuo sito è in grado di servire, guarda la riga "Richieste al secondo". Nel tuo caso è davvero abbastanza semplice dato che hai corso con concurrency di 1. Ogni richiesta, in media, ha richiesto solo 2.371ms. 421 di quelli, uno dopo l'altro, prendono 1 secondo.

Dovresti davvero giocare un po 'con la concorrenza, per valutare con precisione la capacità del tuo sito. Fino a un certo grado di concorrenza ci si aspetta che il throughput aumenti, poiché più richieste vengono gestite in parallelo da IIS. E.g. se il tuo server ha più CPU/core. Inoltre, se una pagina si basa su un IO esterno (servizio di livello intermedio o chiamate DB), la CPU può funzionare su una richiesta, mentre un'altra è in attesa del completamento dell'IO. Ad un certo punto le richieste/sec si livelleranno, con crescente concorrenza, e vedrai un aumento della latenza. Aumenta la concorrenza ancora di più e vedrai diminuire la velocità effettiva (req/sec), poiché il server deve dedicare più risorse a destreggiarsi tra tutte queste richieste simultanee.

Tutto ciò detto, la maggior parte delle vostre richieste ritorna in circa 2ms. Questo è dannatamente veloce, quindi suppongo che non ci sia molto da fare in termini di chiamate DB o middle tier, e il tuo sistema è probabilmente uscito dalla CPU quando il test è in esecuzione (o qualcosa non va, e fallendo molto velocemente. sei sicuro che la pagina di risposta che hai intenzione di ottenere è la pagina di risposta che pensi di provare a 1204 byte?). Questo fa emergere un altro punto: ab stesso consuma anche la CPU, specialmente quando si aumenta la concorrenza. Quindi vuoi correre su un'altra macchina.

Inoltre, se il vostro sito effettuare chiamate esterne ai servizi di livello intermedio o DB, si desidera regolare il vostro machine.config per ottimizzare il numero di thread di IIS alloca: http://support.microsoft.com/default.aspx?scid=kb;en-us;821268

E solo un po 'di curiosità: il tempo necessario le statistiche vengono eseguite con incrementi di ~ 16 ms, in quanto sembra essere la granularità del timer utilizzato. Cioè L'80% delle tue risposte non ha richiesto 0ms, ci sono voluti un po 'di tempo < 16ms.

+0

Cheers mate :) Non ho database o servizi di livello intermedio. È solo il progetto standard predefinito ASP.NET MVC. Sto solo cercando di capire come funziona ApacheBench e come posso usarlo per un po 'di bencharking, ecc. :) –

Problemi correlati