Big Brother is monitoring you – Part 1: JVM mit jvisualvm

Erst eingreifen, wenn es zu einer Störung kommt? Stress und Druck durch eine umständliche Fehlersuche sind da mal direkt vorprogrammiert. Wie wäre es, wenn ich dir in unserer Beitragsreihe “Big Brother is monitoring you” verschiedene Möglichkeiten der System-Überwachung zeige, damit du immer alles im Überblick hast und dir Zeit, Kosten und Nerven erspart bleiben? In diesem Artikel stelle ich dir das Monitoring und die Performance-Analyse einer Java Virtual Machine (JVM) mithilfe von jvisualvm vor.

Veröffentlicht:
Kategorie:
bigbrother_blog_header1

Was ist die Java Virtual Machine?

Die Java Virtual Machine (abgekürzt JVM) ist innerhalb der Java-Laufzeitumgebung verantwortlich für die Ausführung des Java-Bytecodes. Generell wird jedes Java-Programm in seiner eigenen virtuellen Maschine (VM) ausgeführt. Sie ist Schnittstelle zur Maschine und zum Betriebssystem und für die meisten Plattformen verfügbar.

Die Bestandteile der JVM sind

  • der Classloader,
  • die Speicherverwaltung sowie das automatische Aufräumen des Speichers (garbage collection) und
  • der Execution Engine.

Wann ist ein Monitoring der JVM wichtig?

Wenn es zu Performance-Problemen oder anderen nicht erwünschten Verhaltensweisen der JVM kommt, hat das erhebliche Auswirkungen auf die ausgeführten Services.

Somit ist die Überwachung der JVM ein integraler Bestandteil jeder Strategie zur Überwachung der Leistung von Java-Anwendungen. IT-Ops und DevOps-Teams verwenden JVM-Leistungskennzahlen, um serverseitige Engpässe zu beheben. Entwickler und Architekten können auch von der Überwachung der JVM profitieren, indem sie Probleme auf Codeebene aufdecken. Neben der Überwachung der Speicherbereiche der JVM, dem Heap und dem Non-Heap mitsamt seiner Unterbereiche, lassen sich die Threads in der JVM und auch geladene Klassen überwachen.

In diesem Bereich gibt es eine Vielzahl an Tools zum Monitoring. Heute stelle ich eines vor, welches wir in unserer Arbeit als Consultant gerne einsetzen.

JVM Monitoring mit jvisualvm

 

jvisualvm ist ein einfaches, leistungsstarkes, kostenloses und offizielles Monitoring-Tool für die JVM und die oben genannten Komponenten innerhalb der JVM.

jvisualvm ist z.B. Bestandteil der JDK von Oracle und bietet nach dem Start (unter Linux musst du hierfür einen X Server konfiguriert haben) eine grafische Oberfläche mittels derer du die unterschiedlichen Überwachungsbereiche ansteuern und die dazu aktuellen Daten anzeigen lassen kannst. jvisualvm muss nicht zwangsweise auf dem Server verfügbar sein auf dem deine JVM, die du überwachen möchtest, läuft – du kannst auch eine remote jmx Connection zu der zu überwachenden JVM aufbauen.

jvisualvm_5
jvisualvm_5

Startest du das Tool, werden standardmäßig alle lokalen Java Virtual Machines identifiziert. Für das Monitoring von Remote-JVM-Anwendungen musst du dich separat über jstatd oder JMX verbinden.

Wichtig ist hierbei sicherzustellen, dass ein JMX Port konfiguriert und aktiviert ist.

Die wichtigsten Infos beim Monitoring einer JVM 

Sobald du jvisualvm startest, werden dir viele verschiedene Informationen gegeben. Welche Punkte sind dabei wirklich wichtig, damit du die Performance der JVM entsprechend überprüfen kannst? Hier gibt es ein paar Empfehlungen:

  • “Perform GC”: Dieser Befehl startet manuell eine Garbage Collection der JVM. Diesen Indikator zu verwenden, kann hilfreich sein, wenn du das Verhalten der Garbage Collection beobachten möchtest. Es lassen sich für dich Rückschlüsse über die Dauer und die Gründlichkeit des Aufräumvorgangs ziehen.
  • “Heap Dump”: Hier bekommst du ein komplettes Speicherabbild des Heaps. Dessen Auswertung ermöglicht es dir zu sehen, welche Klassen und Methoden einen großen Speicherabdruck in der JVM hinterlassen haben. Es eignet sich auch Leak Suspects, also potentielle Speicherlecks, auszumachen. Für eine solche Heapdump Analyse lassen sich einige Open-Source-Tools im Internet finden. Diese werden wir uns in einem kommenden Beitrag genauer anschauen.
  • “Thread Dump”: Ein Abbild der in der JVM laufenden Threads wird erstellt.

Zur Analyse eines Thread Dumps gibt es wie auch bei den Heap Dumps im Internet entsprechende Open-Source-Tools, die dir hier Aufbereitungsarbeit abnehmen und wichtige Outcomes des Dumps zusammenfassen.

Was du im Wesentlichen dem Thread Dump entnehmen kannst ist, ob es Threads gibt, die blockiert werden oder in der JVM ein sogenannter Thread Deadlock aufgetreten ist. Hierbei gibt es eine Abhängigkeit von Threads, die von selbst so nicht mehr aufgelöst wird und somit die korrekte Ausführung einer Funktion in der JVM behindert. In der Live-Thread-Übersicht kannst du Filter setzen, um zum Beispiel doppelte Threads oder beendete Threads zu identifizieren. Das macht dir den Umgang mit Threads in jvisualvm ein wenig leichter.

jvisualvm_6
jvisualvm_6

Welche Erfahrungen konntest du bereits beim Monitoring einer JVM sammeln? Welche Daten über die vorgestellten hinaus nutzt du für deine Performance-Analyse? 

Ähnliche Blogartikel

  • Fit für Kunden: das nterra Lernprojekt

    Consultants, die aktuell in keinem Kundenprojekt sind, erweitern ihre Skills in einem Lernprojekt und bringen sich so in Höchstform für den nächsten Kundenauftrag.

  • Kick it like Real Time Analytics

    Zur EM 2024 werfen wir mal einen Blick auf unseren Fußballshowcase zu Apama, der Real-Time Analytics-Plattform der Software AG.

  • Agiles Testen – ein Überblick

    Lernen Sie die Wichtigkeit von agilen Tests für die Softwareentwicklung kennen und erfahren Sie, wie Sie so die Produktqualität steigern.