2009-05-12 7 views
8

Guys, wenn die JVM abstürzt schreibt ein Fehlerprotokoll hs_err_pid.log. Ich möchte herausfinden, was die JVM zum Absturz gebracht hat. Wie man diese Logs versteht, ist überall dokumentiert, wie dieses Log arrangiert ist. Ich habe versucht, im Netz zu suchen, aber ohne Erfolg :-(So verstehen Sie Java-Hotspot-Fehler

auf relevante URL Aufzeigen wird geschätzt. Danke.

Antwort

5

Sofern Sie nativen Code anrufen (JNI), nichts in Ihrem Code sollte jemals machen JVM-Absturz, daher sind die Stack-Trace-Informationen in dieser Log-Datei wahrscheinlich nicht sehr nützlich für die meisten Entwickler. Das ist wahrscheinlich der Grund, warum es nicht dokumentiert ist (zumindest extern). Das beste Ding ist wahrscheinlich, einen Fehlerbericht zu erstellen wie von der Fehlermeldung vorgeschlagen

Aber, wenn Sie es wirklich verstehen wollen, Kohsuke's Blog hat die Ware.Wie immer. :)

+0

andere böse Dinge können passieren kann eine JVM Absturz auslösen. Ich habe es mit Dateisystem-Wartung auf dem gleichen Controller aber separaten Einhängepunkten gesehen. Ich habe es beim Ersetzen einer vorhandenen JAR-Datei gesehen, bevor ich den Tomcat gestoppt habe. (Hoppla) Ich konnte diese beiden Ursachen durch die Informationen im hs_err_pid.log mit den Leuten im Sun Java Forum ableiten. –

+0

Ich habe wirklich das Gefühl, ich muss -1. Es verlinkt nicht nur zu einem Blog, aber der Blog gibt mir überhaupt keine Informationen, die mir helfen herauszufinden, warum mein Programm abgestürzt ist. Als solche beantwortet es die Frage einfach nicht. :/ – Joehot200

+0

Link ist jetzt tot. – jdv

0

Suchen Sie zunächst nach der obersten Zeile, die etwa wie "ntdll.dll + 0x2000" aussieht.

Wenn der Hotspot in Ihren nativen Code auftritt (d. H. Die DLL ist einer von Ihnen), dann finden Sie heraus, wie Sie Ihren Compiler überzeugen, eine Liste von Zuordnungen von DLL-Offset zu Zeilennummer zu erstellen. Das bedeutet natürlich, dass Sie die neu kompilierte DLL erneut ausführen müssen und warten müssen, bis das Problem erneut auftritt.

Andernfalls sehen Sie, ob die Suche nach dieser bestimmten Zeile in Google etwas bringt, wobei berücksichtigt wird, dass der gleiche Fehler eine ganze Reihe von Dingen bedeuten kann. Und sehen Sie, ob der DLL-Name so aussieht, als wäre er erkennbar, z. ein Druckertreibername, Grafiktreiber oder eine andere Komponente, die Sie bis zu einem bestimmten Anruf verfolgen können. Was auch immer diese Komponente ist, Sie können sie möglicherweise auf eine feste Version aktualisieren oder den betreffenden Anruf vermeiden. Wenn Sie nicht sicher sind, was die Komponente ist, kann es sich einfach um die "JVM" handeln, die Sie aktualisieren müssen. Es ist wahrscheinlich eine gute Idee, mindestens auf die neueste Version der neuesten Version zu aktualisieren.

In der Vergangenheit habe ich auch Bugs im JIT-Compiler gesehen, die vorübergehend gelöst werden können, indem ich sage, dass ich nicht versuche, die betreffende Methode zu kompilieren - wie ich mich erinnere, gibt es in diesen Fällen den Hotspot-Fehler ein Hinweis darauf, um welche Methode es sich handelte (möglicherweise nur der Speicherauszug des Java-Stacks), aber ich habe kein Beispiel zur Hand, um mich an die Details zu erinnern.