2013-06-13 8 views
8

Devo misurare la quantità di memoria consumata dai miei test JUnit.Metodi per misurare il consumo di memoria durante l'esecuzione dei test JUnit

  1. Quindi il modo più ovvio (ma non comoda) è quello di eseguire JVM con argomenti come "-Xms128m -Xmx512m" e tenere traccia di quando vado a prendere l'errore OutOfMemory.

  2. Il secondo modo è richiedere un heapdump dopo aver eseguito tutti i miei test e quindi utilizzare Memory Analyzer Tool. Ma non è utile farlo ogni volta che eseguo dei test.

Il modo desiderato è, diciamo, per registrare il consumo di memoria in un file con valori quali il consumo di memoria massima, consumo medio, chiamate GC contare ecc O anche disegnare un diagramma che vi mostrerà come è stata utilizzata la memoria .

E la domanda è: ci sono strumenti, metodi o strumenti per fare questo? O forse i miei desideri sono irreali e ingenui e non c'è modo di raccogliere tali dati?

I test sono in esecuzione in IntelliJ Idea con JUnit4. Sono libero di usare qualsiasi altro ambiente. Grazie in anticipo per qualsiasi consiglio!

+1

Beh, se si usa un po 'di server Linux o Unix, un modo semplice sarebbe quello di fare una shell che controlla il PID e stampare la dimensione della memoria a intervalli dati. Dovresti avviare il programma con un basso -Xms e un alto -Xmx. In questo modo non monitoreresti le dimensioni esatte del tuo heap di oggetti, ma almeno il vero consumo del tuo processo. Un'altra idea che mi viene in mente è scoprire come gli ApplicationServer stampano le informazioni GC per registrare i file e vedere se è possibile configurare la configurazione per stampare "Verbose GC info". Questo normalmente include informazioni dettagliate che puoi interpretare in seguito, se necessario. – Martin

+1

http://www.jvmmonitor.org/ per Eclipse, o semplicemente usa jconsole, ecc. –

+1

Non puoi semplicemente usare un profiler, ad esempio da Eclipse? –

risposta

7

È possibile utilizzare JConsole,

http://docs.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html

Viene fornito con JDK

+1

Grazie, JConsole è abbastanza utile! Mi chiedo, se è possibile eseguire automaticamente JConsole e connettersi al processo appena creato con unit-test? – sainr

+1

Non ne sono completamente sicuro, ma penso che non sia possibile ciò che stai menzionando. È possibile introdurre un ritardo nel test per connettere JConsole al processo JUnit quando il test viene eseguito alla prima volta. Ad esempio '@Test public void delayTestForConnectJC() {Thread.sleep (30 * 1000);}'. Ma dovrai connettere manualmente JConsole con il tuo processo JUnit. –

+0

L'idea con ritardo sembra interessante, grazie! Ma comunque, cercherò di trovare qualcosa che andrà automaticamente. – sainr

Problemi correlati