{"id":159,"date":"2019-10-29T09:19:42","date_gmt":"2019-10-29T08:19:42","guid":{"rendered":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=159"},"modified":"2022-12-05T09:20:01","modified_gmt":"2022-12-05T08:20:01","slug":"java-heap-dump-erstellen-und-auswerten","status":"publish","type":"post","link":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=159","title":{"rendered":"Java Heap Dump erstellen und auswerten"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Umgebung<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wildfly 14<\/li>\n\n\n\n<li>EE8<\/li>\n<\/ul>\n\n\n\n<p>Wenn der Speiche auf dem Server zu Neige geht, musst du dir \u00fcberlegen, wie du analysierst wer wieviel Speicher verwendet. Eine M\u00f6glichkeit ist das Erzeugen von Heap Dumps, die den Speicher zu einem festen Zeitpunkt abbilden und dann ausgewertet werden k\u00f6nnen. Wenn es schon &#8222;zu sp\u00e4t&#8220; ist und der Server nicht stabil l\u00e4uft, kann ein Dump auch automatisch erzeugt werden. Hier eine paar Infos mit denen du in sehr kurzer Teit einen Dump erstellen und analysieren kannst. Siehe auch die <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/webnotes\/tsg\/TSG-VM\/html\/clopts.html\">Oracle Doku<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Einen Dump erstellen<\/h2>\n\n\n\n<p>Zum einen gibt es die M\u00f6glichkeit der VM den Parameter<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> \n-XX:+HeapDumpOnOutOfMemoryError\n<\/pre>\n\n\n\n<p>mitzugeben. Werden dann mehr als 98% der Heaps belegt, wird ein Dump im Arbeitsverzeichnis erzeugt. Der Name enth\u00e4lt die Prozess ID als eindeutige Kennzeichnung.<\/p>\n\n\n\n<p>Besser ist es jedoch, wenn man sich proaktiv den Speicher ansehen kann. Die Admin Console des Wildfly gibt einen ersten \u00dcberblick \u00fcber den aktuellen Heap und den zugesicherten Speicher. Diese Angaben sind aber immer eine Absch\u00e4tzung nach oben, da der GC meistens noch nicht alles bereinigt hat. Wird es eng, kann es sinnvoll sein mit dem Befehl<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> \njmap -dump:format=b,file=heap.bin &lt;pid&gt;\n<\/pre>\n\n\n\n<p>einen Hepa-Dump zur Laufzeit zu erstellen (jmap findet sich im bin Verzeichnis des JDK). Die Prozess ID bekommst du unter Windows aus dem Task Manager oder unter Linux mit ps \u2013ef | grep java.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dump anzeigen<\/h2>\n\n\n\n<p>Es gibt verschiedene Tools wie beispielsweise Jvisualvm oder jhat. Die besten Ergebnisse habe ich mit dem <a href=\"https:\/\/www.eclipse.org\/mat\/downloads.php\">Eclipse Memory Analyser<\/a> erziehlt.<\/p>\n\n\n\n<p>Nach der Installation ist es wichtig, dass dem Tool in der Datei MemoryAnalyzer.ini genug Hauptspeicher und ggf. auch das richtige JDK zugewiesen wird.<\/p>\n\n\n\n<p>Es wird erwartungsgem\u00e4\u00df ein angepasstes Eclipse gestartet. Nach dem \u00d6ffnen des Dumps arbeitet die IDE einige Zeit. Im &#8222;Getting Started Wizzard&#8220; kann zwischen verschiedenen Reporten gew\u00e4hlt werden. Ein guter Einstiegt ist der &#8222;Leak Suspects Report&#8220;. Nach Auswahl des Reports kannst du den Wizzard beenden und Eclipse sein Arbeit machen lassen. Ja nach Gr\u00f6\u00dfe des Dumps kann dies etwas dauern.<\/p>\n\n\n\n<p>Um den Speicherverbrauch der einzelnen Datenstrukturen zu sehen, auf einen Teil der angezeigten &#8222;Torte&#8220; klicken und &#8222;Dominator Tree&#8220; w\u00e4hlen. In der angezeigten Tree Table kann gut gepr\u00fcft werden wer wieviel Speicher konsumiert.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fragen und Anmerkungen<\/h3>\n\n\n\n<p>F\u00fcr Fragen und Anmerkungen sendet mir gerne eine <a href=\"mailto:schoenberg@schoenberg-solutions.de\">eMail<\/a>. Wegen der DSGVO habe ich derzeit die Kommentarfunktionen abgestellt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Umgebung Wenn der Speiche auf dem Server zu Neige geht, musst du dir \u00fcberlegen, wie du analysierst wer wieviel Speicher verwendet. Eine M\u00f6glichkeit ist das Erzeugen von Heap Dumps, die den Speicher zu einem festen Zeitpunkt abbilden und dann ausgewertet werden k\u00f6nnen. Wenn es schon &#8222;zu sp\u00e4t&#8220; ist und der Server nicht stabil l\u00e4uft, kann [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-159","post","type-post","status-publish","format-standard","hentry","category-jee"],"_links":{"self":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/159","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=159"}],"version-history":[{"count":1,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/159\/revisions"}],"predecessor-version":[{"id":160,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/159\/revisions\/160"}],"wp:attachment":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}