2009-06-04 10 views
34

Se un processo si interrompe e lascia un core dump o ne creo uno con gcore, come posso analizzarlo?Come analizzare le informazioni da un core dump Java?

Mi piacerebbe essere in grado di utilizzare jmap, jstack, jstat ecc. E anche di vedere i valori di tutte le variabili.

In questo modo è possibile trovare i motivi di una JVM arrestata o bloccata.

+0

Che cos'è un core dump Java? Ti stai riferendo alla traccia dello stack dell'applicazione o si è verificato un arresto anomalo della JVM risultante in un core dump? –

+1

Potremmo convertire questo in un wiki? Questa non è una domanda di programmazione. Tuttavia, è molto rilevante per qualsiasi programmatore java sulla piattaforma unix. Passare a softwarerecs .. è un'altra scelta. In ogni caso, per favore non cancellarlo .. – Jayan

risposta

0

IBM fornisce un numero di strumenti che possono essere utilizzati anche su sun jvm. Date un'occhiata ad alcuni dei progetti su AlphaWorks, essi forniscono un heap e filo Gli analizzatori di dump

Karl

0

vi consiglio di provare Netbeans Profiler .Ha ricco set di strumenti per l'analisi in tempo reale. Gli strumenti di IbM meritano una prova per l'analisi offline

5

Sei sicuro che un core dump è quello che vuoi qui? Ciò conterrà l'intestino grezzo della JVM in esecuzione, piuttosto che le informazioni a livello di java. Forse un dump dell'heap JVM è più quello di cui hai bisogno.

35

OK se hai creato il core dump con gcore o gdb, dovrai convertirlo in qualcosa chiamato file HPROF. Questi possono essere utilizzati da VisualVM, Netbeans o Memory Analyzer Tool di Eclipse (precedentemente SAP Memory Analyzer). Consiglierei Eclipse MAT.

Per convertire il file utilizzare lo strumento della riga di comando jmap.

# jmap -dump:format=b,file=dump.hprof /usr/bin/java core.1234 

dove:

dump.hprof è il nome del file hprof si desidera creare

/usr/bin/java è il percorso alla versione del binario Java generato il core dump

core.1234 è il tuo normale file core.

+0

Possiamo convertire un file di core core jdk 1.4 prodotto usando gcore in hprof su solaris usando jdk1.5/bin/jmap? Ho provato ad usare il comando sopra ma dà l'errore: Errore di collegamento al file principale: non riesco a trovare il flag "UseSharedSpaces" – techzen

+0

techzen: non sono sicuro di ciò, temo .. stai sicuramente riferendo l'eseguibile 1.4 java su la linea di comando? Se è così allora potrebbe essere semplicemente che i core core 1.4 non sono compatibili. – chillitom

+0

È possibile utilizzare jmap per convertire un file mdmp generato da JVM quando si blocca (http://docs.oracle.com/cd/E15289_01/doc.40/e15059/crash.htm)? – Greenhand

2

In realtà, VisualVM può elaborare il core dump dell'applicazione.

Basta richiamare "File/Aggiungi VM Coredump" e aggiungere una nuova applicazione in Esplora applicazioni. È quindi possibile eseguire il dump del thread o il dump dell'heap di tale JVM.

+0

File vm coredump è ombreggiato per me. Non sei sicuro del perché esattamente – visch

+0

Se sei su Windows, non è supportato e sfarfallio sfortunatamente. Sono nella stessa barca. http://visualvm.java.net/coredumps.html Il nodo Core Dump è visibile nella finestra Applicazioni se VisualVM è in esecuzione su Solaris o Linux. –

6

Se si utilizza un IBM JVM, download il IBM Discussione e Monitor Dump Analyzer. È uno strumento eccellente. Fornisce dettagli sui thread e può indicare deadlock, ecc. Il seguente blog post fornisce una buona panoramica su come usarlo.