Domanda

Mi rendo conto che simili questioni sono state poste su questo prima qui su SO, ma permettetemi di descrivere esattamente quello che devo fare:

Ho una serie di test che esegue un'applicazione Java riga di comando e mi piacerebbe aggiungere memoria profiling a loro. Una possibilità che vedo sarebbe quella di aggiungere il codice (eventualmente utilizzando 3rd party tools / librerie) alla mia domanda che avrebbe fornito una fotografia istantanea della memoria. Un'altra opzione sarebbe quella di utilizzare uno strumento di terze parti che gestisce / strumenti la mia domanda e la JVM per me (e idealmente non richiede mi apportare modifiche al codice). Sto pensando a qualcosa di simile, ma Valgrind per Java. Anche open source, se possibile.

Quello che mi piacerebbe davvero fare è impostare i test di memoria in modo che il mio utilizzo della memoria viene monitorata ad intervalli regolari, diciamo ogni secondo, e gettati in un file di testo. In questo modo sarei in grado di vedere se l'utilizzo della memoria oscilla / aumenta / diminuisce nel tempo. Sarò anche in grado di calcolare il massimo e picchi min.

Qualcuno ha qui fatto niente del genere?

Grazie in anticipo.

È stato utile?

Soluzione

Con qualcosa come JProfiler tutto quello che dovete fare è aggiungere alcuni parametri per la JVM. Esso utilizza JVMTI.

Penso che si dovrebbe essere la lettura su profiler ed esattamente che cosa possono fare per voi. Ho anche suggerire la lettura su JVMTI.

Il JVMTM Tool Interface (JVM TI) è una nuova interfaccia di programmazione nativo per l'utilizzo da strumenti. Esso fornisce sia un modo per controllare lo stato e di controllare l'esecuzione di applicazioni in esecuzione nella macchina virtuale Java (JVM). JVM TI supporta l'intera gamma di strumenti che hanno bisogno di accesso a state JVM, inclusi ma non limitati a:. Profiling, di debug, il monitoraggio, l'analisi filo, e gli strumenti di analisi di copertura

Nota: JVM TI sostituisce la Java Virtual Machine Interface Profiler (JVMPI) e la Java Virtual Machine Debug Interface (JVMDI). JVMPI e JVMDI verranno rimossi nella prossima release di J2SETM.

Altri suggerimenti

Yourkit ha anche un buon profiler

Hai controllato

VisualVM e Eclipse Callisto ?

Un buon punto di partenza è quello di vedere se il JVM supporta "Java -Xrunhprof" in quanto questo può generare mucchio informazioni di profilo senza rendere lo scenario più complesso.

http://docs.oracle.com/ JavaSE / 7 / docs / note tecniche / campioni / hprof.html

Si potrebbe scoprire che abbastanza per voi per l'avvio.

Diversi profiler come YourKit avere API per rintracciare allocazioni di memoria. Un'altra opzione qui sono strumenti quali il monitoraggio jxinsight  o GLASSBOX o jamon

Per analizzare mucchio discariche Eclipse Memory Analyzer è lo strumento migliore si può ottenere. E 'gratuito e open source, in modo da poter automatizzare l'analisi di heap dump tanto quanto si desidera.

I sviluppare in Eclipse, ma devo Netbeans giro di usare la sua eccellente Profiler. Si è limitata rispetto ad alcuni tra quelli commerciali, ma ancora abbastanza buono per avvistare la maggior parte dei colli di bottiglia

È possibile utilizzare jrcmd , che è un'utility a riga di comando che viene fornito con la JVM JRockit. Se si conosce il pid del processo Java solo si può fare:

JROCKIt_HOME\bin\jrcmd <pid> print_object_summary

e vi darà:

31.8% 3198k    41907   -137k [C
11.9% 1196k      300     +0k [B
11.4% 1151k    49118     +6k java/lang/String
 6.1% 612k     5604     +0k java/lang/Class
 4.3% 431k     2388     +0k [I
 3.5% 353k    15097     +0k java/util/HashMap$Entry
 ...

Oltre alle risposte di cui sopra ho apprezzato anche usando profiler un paio di anni fa. Non so se questo aiuta.

Vi consiglio dynaTrace edizione di produzione. strumento molto profilo applicazione memoria. Basso overhead e il 100% delle transazioni eseguite.

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