2013-09-23 6 views
9

È difficile trovare tutti i colli di bottiglia, i deadlock e le perdite di memoria in un'applicazione Java utilizzando solo i test delle unità.Test di prestazioni/stress Applicazioni Java EE

Vorrei aggiungere un livello di stress test per la mia applicazione. Voglio testare i limiti dell'applicazione e determinare come reagisce sotto carico elevato.

vorrei valutare quanto segue:

  • Availablity sotto carico elevato
  • prestazioni sotto carico elevato
  • memoria/CPU Usage/Disco sotto carico elevato
  • si pianta sotto alta caricare o reagire con grazia

Sarebbe anche interessante misurare e contrastare tali caratteristiche secondo la norma al carico.

Sono le loro ben note tecniche standard per affrontare le prove di stress. Sto cercando aiuto/direzione nella creazione di un tale ambiente. Idealmente, vorrei eseguire questi test regolarmente, in modo da poter determinare se le consegne recenti influiscono sulle prestazioni.

+2

Vorrei raccomandare Apache JMeter http://jmeter.apache.org/ come uno strumento di test di stress eccellente per le applicazioni web. È facile da usare e può essere esteso. – Rami

+0

Ho trovato che Gatling (http://gatling.io) è uno strumento eccellente. – cmd

risposta

0

Ci sono principalmente due approcci per le prestazioni su una domanda:

Performance test e test di sistema

In cosa differiscono? Beh, è ​​facile, si basa sul loro scopo, lo scopo dei test di prestazione è limitato e altamente realistico. Esempio: testare il gestore di IncomingMessage su alcune App X, per questo si configurerebbe un test che invia i meesages a questo gestore su base X, Y, Z. Questo approccio ti aiuterà a individuare i problemi e a misurare le prestazioni delle singole e limitate zone sulla tua applicazione.

Quindi questo ora dovrebbe portarti alla domanda, quindi sono io a fare un punto di riferimento e testare i singoli componenti della mia app individualmente? Sì, se ritieni che il comportamento del componente sia fondamentale e che le modifiche alle versioni più recenti possano indurre delle penalizzazioni in termini di prestazioni. Ma, se vuoi avere un'idea della tua applicazione nel suo insieme, il gruppo di componenti che interagiscono tra loro e vedere come vengono fuori le prestazioni, allora hai bisogno di un test di sistema.

Un test di sistema cercherà sempre di riprodurre il più vicino possibile qualsiasi ambiente di produzione del cliente. Qui puoi osservare che aspetto ha il mondo reale delle prestazioni della tua app e agire di conseguenza per correggerlo.

Quindi, come conclusione, imposta un test di sistema sulla tua app e misura quello che stavi dicendo che volevi misurare. Quindi Sottolinea il sistema nel suo complesso e osserva come reagisce, sarai sorpreso dal risultato.

Infine, testare individualmente i componenti critici identificati o che si desidera tenere traccia della propria app.

Come linea guida generale, quando si eseguono le prestazioni si dovrebbe sempre: 1.- Ottenere una linea di base per il sistema su uno stato inattivo. 2.- Ottenere una previsione per il sistema in base al normale carico previsto. 3.- Ottenere una linea di base per il sistema in condizioni di stress.

Tenere presente che i risultati del carico normale devono essere estrapolati alle condizioni di stress e un sistema piacevole sarà sempre quello che scala linearmente.

Spero che questo aiuti.

P.S. I test, la configurazione dell'ambiente e persino la raccolta dei dati dovrebbero essere il più completamente automatici possibile, questo vi aiuterà a gestirlo in base a ciò e impiegherà tempo a diagnosticare problemi di prestazioni e non a impostare il test.

5

Sono un grande fan di JMeter. È possibile impostare le chiamate direttamente sul server proprio come gli utenti accederanno. È possibile controllare il numero di utenti (thread concorrenti) e gli accessi. Può seguire un flusso di lavoro, raschiando la pagina di informazioni pertinenti alla pagina. Ci vogliono da 1 a 2 giorni per impararlo abbastanza bene da essere produttivo. (Puoi fare le basi entro un'ora di download!)

Come per vedere come tutto ciò influisce sul server, questa è una domanda più difficile. Ho usato strumenti professionali da CA e IBM. (Sto disegnando uno spazio vuoto su nomi di strumenti specifici - forse a causa di PTSD!) Ho usato profilatori JVM out-of-the-box. Ho usato strumenti nativi di linux e windows. Se non sei troppo interessato a profilare quali parti della tua applicazione causano problemi, puoi semplicemente utilizzare gli strumenti nativi per il tuo sistema operativo per monitorare CPU/memoria/IO.

+0

Per quanto riguarda "Sarebbe anche interessante misurare e contrastare tali caratteristiche sotto carico normale". Ti invito a controllare Metrics: http://metrics.dropwizard.io/3.1.0/ – lrn2prgrm