2013-11-27 14 views
10

Ho provato questo Get a heapdump on JVM from Tomcat 6 ma non funziona per me, ci sono altri modi per ottenere il dump dell'heap dal server tomcat? Grazie in anticipo!modi come ottenere heap dump dall'esecuzione di tomcat 7

+0

Qual è il problema che hai incontrato nel tentativo di eseguire il dump dell'heap? – Taky

+0

Il collegamento si limita a eseguire il dump dell'heap quando JVM si esaurisce a causa della memoria insufficiente. Non ti permette di fare heapdump, quando vuoi. Ma è ancora un'opzione molto utile per te. – Taky

risposta

17

Il modo più semplice per ottenere heap dump è utilizzare jmap. Sulla macchina con processo java eseguire il comando jmap. Esempio di utilizzo:

jmap -dump:file=/mnt/heapdump_2013-04-01.data 29842 

uso jps sapere java Pid.


Inoltre è possibile effettuare lo heap dump tramite jvisualvm. È possibile connettersi alla macchina remota tramite jmx o jstatd. È possibile eseguire heapdump e archiviare sul computer remoto.

Per analizzare i cumuli di heap è possibile avvisare: MAT. Strumento molto potente che ti consente di comprendere rapidamente i problemi. Puoi trovare here inro per il MAT.


Se non si vuole fermare l'applicazione per un lungo periodo si può fare dump binario (You can use gcore or gdb). E puoi use jmap to analyze gdb dump. Ulteriori informazioni sono disponibili su atlassian blog. Attenti allo someissues.

+0

Potrebbe essere necessario utilizzare "sudo" – th3morg

5

Un altro modo oltre al "Dump heap" -Button di jvisualvm è tramite l'interfaccia JMX. In questo modo puoi persino specificare dove archiviare il dump.

connettersi al server JMX di tomcat utilizzando jconsole o jvisualvm con il plug-in JMX. Quindi ottenuto a com.sun.management ->HotSpotDiagnotic ->Operations. Accanto a dumpHeap inserisci i due parametri. Dalla documentazione di Oracle (vedi here):

Parametri:

OutputFile - Il nome del file dipendente dal sistema

dal vivo - se vera discarica solo vivere gli oggetti, vale a dire oggetti che sono raggiungibili dagli altri

Quindi premere dumpHeap e osservare il blocco della macchina virtuale per un po 'di tempo durante la scrittura del dump.

1

Mi raccomando visual VM http://visualvm.java.net/ È uno strumento tutto in uno che può connettersi a tomcat, creare e leggere heap dump, creare dump di thread, cpu e campionatore di memoria.

Se si utilizza il nuovo jdk 1.7, VisualVM è già contenuto nella cartella jdk.