Arndt Schönbergs Weblog

Dienstag Okt 29, 2019

Heap Dump erstellen und auswerten

Umgebung

  • Wildfly 14
  • EE8
Wenn der Speiche auf dem Server zu Neige geht, musst du dir überlegen, wie du analysierst wer wieviel Speicher verwendet. Eine Möglichkeit ist das Erzeugen von Heap Dumps, die den Speicher zu einem festen Zeitpunkt abbilden und dann ausgewertet werden können. Wenn es schon "zu spät" ist und der Server nicht stabil läuft, 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 Oracle Doku.

Einen Dump erstellen

Zum einen gibt es die Möglichkeit der VM den Parameter
 
-XX:+HeapDumpOnOutOfMemoryError
mitzugeben. Werden dann mehr als 98% der Heaps belegt, wird ein Dump im Arbeitsverzeichnis erzeugt. Der Name enthält die Prozess ID als eindeutige Kennzeichnung.

Besser ist es jedoch, wenn man sich proaktiv den Speicher ansehen kann. Die Admin Console des Wildfly gibt einen ersten Überblick über den aktuellen Heap und den zugesicherten Speicher. Diese Angaben sind aber immer eine Abschätzung nach oben, da der GC meistens noch nicht alles bereinigt hat. Wird es eng, kann es sinnvoll sein mit dem Befehl

 
jmap -dump:format=b,file=heap.bin <pid>
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 –ef | grep java.

Dump anzeigen

Es gibt verschiedene Tools wie beispielsweise Jvisualvm oder jhat. Die besten Ergebnisse habe ich mit dem Eclipse Memory Analyser erziehlt.

Nach der Installation ist es wichtig, dass dem Tool in der Datei MemoryAnalyzer.ini genug Hauptspeicher und ggf. auch das richtige JDK zugewiesen wird.

Es wird erwartungsgemäß ein angepasstes Eclipse gestartet. Nach dem Öffnen des Dumps arbeitet die IDE einige Zeit. Im "Getting Started Wizzard" kann zwischen verschiedenen Reporten gewählt werden. Ein guter Einstiegt ist der "Leak Suspects Report". Nach Auswahl des Reports kannst du den Wizzard beenden und Eclipse sein Arbeit machen lassen. Ja nach Größe des Dumps kann dies etwas dauern.

Um den Speicherverbrauch der einzelnen Datenstrukturen zu sehen, auf einen Teil der angezeigten "Torte" klicken und "Dominator Tree" wählen. In der angezeigten Tree Table kann gut geprüft werden wer wieviel Speicher konsumiert.

Dienstag Okt 08, 2019

Phabricator - Git Hooks - Parameter

Wir machen aktuell Testläufe mit Phabricator. Nun sind PHP Anwendungen nun gerade meine Lieblinge …. probieren kann man aber mal, da der Funktionsumfang für qualitativ hochwertige Softwareentwicklung sehr vielversprechend ist.

Bei unseren ersten Tests unsere SVN und Git Repositories zu übertragen, mussten wir auch Pre-Commit Hooks erzeugen. Hierbei hat es länger gedauert bis wir feststellen konnten wo und wie die Revisionen bei Git-Hooks übergeben werden – daher dieser kurze Blog.

Es werden

  • die alte Revisionsnummer
  • die neue Revisionsnummer
  • und das Verzeichnis der Dateien
übergeben

In einem Bash Skript können diese mit class="codeContentInLine">read gelesen werden

 
read REVISION_OLD REVISION_NEW REFERENCE_DIR

Calendar

Feeds

Search

Links

Navigation