Untersuchung von OOM und anderen JVM-Problemen
Wenn Sie mit einer großen Lucene/Solr-Installation arbeiten, stoßen Sie manchmal auf Speicherprobleme oder Probleme mit der Garbage Collection. Meiner Erfahrung nach kommt das nicht häufig vor, aber es ist wie im Leben: Es passiert. Wann immer ich auf solche Probleme stoße, verlasse ich mich auf eine Reihe von kostenlosen Tools, um das Problem zu untersuchen. Es gibt noch viele andere kostenlose Tools, die ich ausprobiert habe, aber im Laufe der Zeit habe ich die folgenden als besonders nützlich empfunden:
jmap http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jmap.html
Dies ist ein großartiges kleines Tool, mit dem Sie Live-Speicherinformationen von laufenden Java-Anwendungen erhalten. jmap -histo ist ein sehr nützlicher Befehl. Er zeigt ein nettes kleines Histogramm des Heaps für einen laufenden Prozess an. Es ist oft viel einfacher, dieses Tool zu verwenden, um zu sehen, was den ganzen RAM beansprucht, als einen Profiler einzuschalten, zumal jmap heutzutage mit den meisten JDKs mitgeliefert wird.
VisualGC http://java.sun.com/performance/jvmstat/visualgc.html
Ein großartiges Tool, das die Vorteile der jstat-Instrumentierung nutzt, die heutzutage Teil aller JVMs ist, um Ihnen eine visuelle Darstellung des Speicherbedarfs einer Live-Anwendung zu zeigen. Damit können Sie Ihren Heap verfolgen und beobachten, wie sich der Speicherplatz füllt und überläuft usw. Dies ist ein sehr cooles Tool, mit dem Sie herumspielen können. Es ist sehr nützlich, um ein Gefühl dafür zu bekommen, wie die Garbage Collection in Ihrer Anwendung funktioniert.
jstatd http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstatd.html
Damit können Sie die meisten dieser Tools aus der Ferne verwenden. Das ist jetzt etwas veraltet, denn ich glaube, die neuesten Java-Versionen erlauben es Ihnen, einfach einen Befehlszeilenparameter zu verwenden, wenn Sie die Java-Anwendung für Fernverbindungen starten.
jconsole http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html
jconsole ist ein leistungsstarkes Tool zur Fernüberwachung und -verwaltung für die Java-Plattform. Wenn Sie es noch nicht selbst benutzt haben, sollten Sie unbedingt einige Zeit mit diesem Tool verbringen. Mit diesem GUI-Tool können Sie eine Fülle von Live-Statistiken und JVM-Informationen anzeigen. Java 1.5 und höher wird mit jconsole geliefert.
Netbeans Profiler http://www.netbeans.org/
Der Profiler, der in Netbeans enthalten ist, ist erstklassig und sehr einfach zu bedienen. Ich verwende Eclipse, habe aber auch Netbeans installiert, um einige der kleinen Vorteile wie den Profiler zu nutzen. Netbeans selbst ist auch immer besser geworden, aber es hat mich noch nicht von Eclipse weggezogen. Netbeans hat den besten und am einfachsten zu bedienenden kostenlosen Profiler, den ich je benutzt habe (Netbeans Profiler ist auch Teil des nächsten Tools).
VisualVM https://visualvm.dev.java.net/
Dies ist ein großartiges Open-Source-VM-Tool, das die Fähigkeiten von jconsole mit dem Netbeans-Profiler und Plugin-Framework kombiniert. Es ist ein sehr cooler Wrapper für viele bestehende Java-Tools, der praktisch unbegrenzt erweiterbar ist. Sehr interessant und sehr nützlich.
Einige der jstat-Tools werden mit Java 1.5-Distributionen und höher ausgeliefert (abhängig von der Distribution), aber wenn Sie Java 1.4 verwenden, sollten Sie sich http://java.sun.com/performance/jvmstat/ ansehen.
Diese Tools eignen sich hervorragend für die Fehlersuche bei RAM- und Garbage Collection-Problemen. Um Ihren Werkzeugkasten für die Garbage Collection zu erweitern, schauen Sie sich auch Folgendes an: http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
Das Ausprobieren der verschiedenen verfügbaren Garbage Collection-Optionen und die Überwachung mit einigen der oben genannten Tools kann ein sehr effektiver Angriff auf eine schlechte GC-Leistung sein.