Domanda

Sto cercando di capire come usare ApacheBench e confrontare il mio sito Web. Ho installato il progetto del sito predefinito (è ASP.NET MVC ma per favore non smettere di leggere se non sei una persona .NET).

Non ho cambiato nulla. Aggiungi nuovo progetto. Impostare la configurazione su RELEASE. Esegui senza debug. (quindi è in modalità LIVE). Sì, questo è con il webserver integrato, non con il grado 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, non sono sicuro di cosa dovrei guardare.

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

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

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

Grazie :)

È stato utile?

Soluzione

  

qual è il motivo per aggiungere altro   concurrent? Come in, se ho 1000 colpi   su 1 concorrente, come differisce   a 500 su 2 simultanei? È per testare   se c'è qualche codice che ne blocca altri   richieste?

Si tratta di questo, sì: la tua applicazione probabilmente sta facendo cose in cui la concorrenza può causare 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à attendere che la prima pagina abbia finito di lavorarci.
  • lo stesso per l'accesso al database: se una pagina sta scrivendo su un database, esiste un qualche tipo di meccanismo di blocco (sia esso basato su tabella, o basato su riga, o qualsiasi altra cosa, a seconda del tuo DBMS)

Test con una concorrenza di uno è OK ... Fintanto che il tuo sito web non avrà mai più di un utente contemporaneamente; che non è del tutto realistico, spero per te.


Devi pensare a quanti utenti saranno sul sito contemporaneamente, quando è in produzione - e adattare la concorrenza; ricorda solo che 5 utenti contemporaneamente sul tuo sito non significano che devi testare con una concorrenza di 5 con ab:

  • gli utenti reali aspetteranno un paio di secondi tra ogni richiesta (tempo di leggere la pagina, fare clic su un collegamento, ...)
  • ab non aspetta affatto: ogni volta che viene caricata una pagina (ovvero, una richiesta è terminata), lancia un'altra richiesta!


Inoltre, altre due cose:

  • solo test per una pagina: gli utenti reali navigeranno sull'intero sito Web, il che potrebbe causare problemi di concorrenza che non avresti durante il test di una sola pagina
  • ab carica solo una pagina: non richiede risorse esterne (pensa a CSS, immagini, JS, ...); il che significa che avrai molte altre richieste, anche se non veramente costose, quando il tuo sito è in produzione.

Come sidenote: potresti dare un'occhiata ad altri strumenti, che possono fare test molto più completi, come assedio , Jmeter o OpenSTA : ab è davvero bello quando vuoi misurare se qualcosa che hai fatto sta ottimizzando o meno la tua pagina; ma se vuoi simulare " real " utilizzo del tuo sito, quelli sono molto più adattati.

Altri suggerimenti

Sì, se vuoi sapere quante richieste al secondo è in grado di servire il tuo sito, guarda il " Richieste al secondo " linea. Nel tuo caso è davvero abbastanza semplice poiché hai eseguito un ab con concorrenza di 1. Ogni richiesta, in media, ha richiesto solo 2,37 ms. 421 di questi, uno dopo l'altro, richiedono 1 secondo.

Dovresti davvero giocare un po 'con la concorrenza, per valutare accuratamente la capacità del tuo sito. Fino a un certo grado di concorrenza ci si aspetterebbe che il throughput aumentasse, poiché IIS gestisce più richieste in parallelo. Per esempio. se il tuo server ha più CPU / core. Inoltre, se una pagina si basa su 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. A un certo punto le richieste / sec si stabilizzeranno, con una crescente concorrenza, e vedrai aumentare la latenza. Aumenta la concorrenza ancora di più e vedrai diminuire il tuo throughput (req / sec), poiché il server deve dedicare più risorse a destreggiarsi tra tutte queste richieste simultanee.

Detto questo, la maggior parte delle tue richieste torna in circa 2ms. È piuttosto dannatamente veloce, quindi immagino che non ci sia molto da fare in termini di chiamate DB o di livello intermedio e il tuo sistema è probabilmente al massimo su CPU quando il test è in esecuzione (o qualcosa non va e fallisce molto velocemente. sei sicuro che ab ottenga la pagina di risposta che intendi? Cioè è la pagina che pensi di testare 1204 byte di grandi dimensioni?). Il che fa emergere un altro punto: ab stesso consuma anche la cpu, specialmente una volta aumentata la concorrenza. Quindi vuoi eseguire ab su un'altra macchina.

Inoltre, se il tuo sito effettua chiamate esterne a servizi di livello intermedio o DB, desideri modificare machine.config per ottimizzare il numero di thread allocati da IIS: http://support.microsoft.com/default.aspx?scid=kb;en-us;821268

E solo un po 'di curiosità: il tempo impiegato dalle statistiche è fatto con incrementi di ~ 16ms, in quanto questa sembra essere la granularità del timer utilizzato. Cioè L'80% delle tue risposte non ha impiegato 0 ms, ci sono voluti del tempo & Lt; 16ms.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top