2009-05-12 22 views
8

Ragazzi quando la JVM si blocca scrive un registro errori hs_err_pid.log. Voglio scoprire cosa ha causato l'arresto anomalo della JVM? Come capire questi registri, è documentato ovunque su come è organizzato questo registro. Ho provato a cercare in rete, ma senza alcun risultato :-(Come comprendere gli errori di Hotspot Java

Sottolineando al relativo URL sarà apprezzato. Grazie.

risposta

5

A meno che non si sta chiamando codice nativo (JNI), nulla nel codice dovrebbe mai fare JVM si blocca, quindi le informazioni di traccia dello stack in quel file di registro probabilmente non sono destinate a essere molto utili alla maggior parte degli sviluppatori. Probabilmente questo potrebbe non essere documentato (almeno esternamente) Quindi la cosa migliore è probabilmente presentare un bug report come suggerito dal messaggio di errore

Ma, se proprio vuoi capirlo, Kohsuke's Blog ha la merce. Come al solito :)

+0

Altre cose cattive possono accadere che possono indurre un blocco della JVM. L'ho visto con la manutenzione del file system sullo stesso controller ma punti di mount separati. L'ho visto quando si sostituisce un file jar esistente prima di arrestare il tomcat. (Oops.) Sono stato in grado di dedurre queste due cause dalle informazioni contenute in hs_err_pid.log con le persone sul forum di Sun Java. –

+0

Mi sento davvero come se dovessi -1 questo. Non solo si collega solo a un blog, ma il blog non mi fornisce alcuna informazione che mi porti a scoprire perché il mio programma si è bloccato. In quanto tale, non risponde alla domanda. :/ – Joehot200

+0

Il collegamento è morto. – jdv

0

Per iniziare, cercare la riga più in alto che assomigli a "ntdll.dll + 0x2000".

Se l'hotspot si sta verificando in tuo codice nativo (vale a dire la DLL è uno dei tuoi), quindi trovare il modo di convincere il compilatore di produrre un elenco di applicazioni da DLL offset per numero di riga. Ovviamente, ciò potrebbe significare che è necessario rieseguire la DLL appena compilata e attendere che il problema si ripresenti.

Altrimenti, guarda se la ricerca di quella linea specifica fa apparire qualcosa in Google, tenendo presente che lo stesso errore potrebbe significare un'intera serie di cose. E vedi se il nome della DLL sembra essere riconoscibile, ad es. un nome del driver della stampante, un driver grafico o qualche altro componente che è possibile rintracciare in una determinata chiamata. Qualunque sia il componente, è possibile aggiornarlo a una versione fissa o evitare di effettuare la chiamata in questione. Se non sei sicuro di quale sia il componente, potrebbe essere solo "la JVM" che devi aggiornare - l'aggiornamento almeno all'ultimo aggiornamento/versione minore di nubmer di qualunque versione tu sia probabilmente è una buona idea.

In passato ho visto anche bug nel compilatore JIT che possono essere risolti temporaneamente dicendo di non tentare di compilare il particolare metodo in questione-- come ricordo vagamente, in questi casi, l'errore di hotspot dà qualche indizio su quale fosse il metodo (forse solo il dump dello stack Java), ma non ho un esempio da utilizzare per richiamare i dettagli.

Problemi correlati