Ein Leitfaden für Java-Profiler

1. Übersicht

Manchmal reicht es nicht aus, nur ausgeführten Code zu schreiben. Wir möchten vielleicht wissen, was intern vor sich geht, wie die Speicherzuweisung, die Konsequenzen der Verwendung eines Codierungsansatzes gegenüber einem anderen, die Auswirkungen gleichzeitiger Ausführungen, Bereiche zur Verbesserung der Leistung usw. Wir können hierfür Profiler verwenden.

Ein Java Profiler ist ein Tool, das Java-Bytecode-Konstrukte und -Operationen auf JVM-Ebene überwacht . Diese Codekonstrukte und -operationen umfassen Objekterstellung, iterative Ausführungen (einschließlich rekursiver Aufrufe), Methodenausführungen, Threadausführungen und Garbage Collections.

In diesem Artikel werden die wichtigsten Java-Profiler erläutert: JProfiler, YourKit, Java VisualVM und der Netbeans-Profiler.

2. JProfiler

JProfiler ist für viele Entwickler eine Top-Wahl. Mit einer intuitiven Benutzeroberfläche bietet JProfiler Schnittstellen zum Anzeigen der Systemleistung, der Speichernutzung, potenzieller Speicherlecks und der Thread-Profilerstellung.

Mit diesen Informationen können wir leicht erkennen, was wir zur Optimierung, Beseitigung oder Änderung des zugrunde liegenden Systems benötigen.

So sieht die Benutzeroberfläche des JProfilers aus:

JProfiler-Übersichtsoberfläche mit Funktionen

Wie die meisten Profiler können wir dieses Tool sowohl für lokale als auch für Remote-Anwendungen verwenden. Dies bedeutet, dass es möglich ist, Java-Anwendungen zu profilieren, die auf Remotecomputern ausgeführt werden, ohne dass etwas auf ihnen installiert werden muss .

JProfiler bietet auch erweiterte Profilerstellung für SQL- und NoSQL-Datenbanken . Es bietet spezifische Unterstützung für die Profilerstellung von JDBC-, JPA / Hibernate-, MongoDB-, Casandra- und HBase-Datenbanken.

Der folgende Screenshot zeigt die JDBC-Prüfoberfläche mit einer Liste der aktuellen Verbindungen:

JProfiler-Datenbankprüfansicht

Wenn wir mehr über den Aufrufbaum der Interaktionen mit unserer Datenbank erfahren möchten und Verbindungen sehen möchten , die möglicherweise durchgesickert sind , kann JProfiler dies problemlos tun.

Live Memory ist eine Funktion von JProfiler, mit der wir die aktuelle Speichernutzung unserer Anwendung anzeigen können . Wir können die Speichernutzung für Objektdeklarationen und -instanzen oder für den vollständigen Aufrufbaum anzeigen.

Im Fall des Zuordnungsaufrufbaums können Sie den Aufrufbaum von Live-Objekten, von Müll gesammelten Objekten oder beidem anzeigen. Wir können auch entscheiden, ob dieser Zuordnungsbaum für eine bestimmte Klasse oder ein bestimmtes Paket oder für alle Klassen gelten soll.

Der folgende Bildschirm zeigt die Nutzung des Live-Speichers durch alle Objekte mit Instanzzahlen:

JProfiler Live-Speicheransicht

JProfiler unterstützt die Integration mit gängigen IDEs wie Eclipse, NetBeans und IntelliJ. Es ist sogar möglich, vom Schnappschuss zum Quellcode zu navigieren !

3. YourKit

YourKit Java Profiler läuft auf vielen verschiedenen Plattformen und bietet separate Installationen für jedes unterstützte Betriebssystem (Windows, MacOS, Linux, Solaris, FreeBSD usw.).

Wie JProfiler verfügt YourKit über Kernfunktionen zur Visualisierung von Threads, Speicherbereinigungen, Speichernutzung und Speicherlecks sowie Unterstützung für lokale und Remote-Profilerstellung über SSH-Tunneling .

Hier ein kurzer Überblick über die Ergebnisse der Speicherprofilerstellung einer Tomcat-Serveranwendung:

YourKit Java Profiler-Speicherprofilierung der Tomcat-Serveranwendung

YourKit ist auch dann nützlich, wenn wir ausgelöste Ausnahmen profilieren möchten . Wir können leicht herausfinden, welche Arten von Ausnahmen ausgelöst wurden und wie oft jede Ausnahme aufgetreten ist.

YourKit verfügt über eine interessante Funktion zur CPU-Profilerstellung, mit der sich bestimmte Bereiche unseres Codes wie Methoden oder Teilbäume in Threads gezielt profilieren lassen . Dies ist sehr leistungsfähig, da es durch seine Was-wäre-wenn-Funktion eine bedingte Profilerstellung ermöglicht.

Abbildung 5 zeigt ein Beispiel für die Thread-Profiling-Schnittstelle:

Abbildung 5. Profilierungsschnittstelle für YourKit Java Profiler-Threads

Wir können auch SQL- und NoSQL-Datenbankaufrufe mit YourKit profilieren. Es bietet sogar eine Ansicht für tatsächlich ausgeführte Abfragen.

Obwohl dies keine technische Überlegung ist, ist das zulässige Lizenzmodell von YourKit eine gute Wahl für Mehrbenutzer- oder verteilte Teams sowie für Einlizenzkäufe.

4. Java VisualVM

Java VisualVM ist ein vereinfachtes und dennoch robustes Profiling-Tool für Java-Anwendungen. Standardmäßig wird dieses Tool mit dem Java Development Kit (JDK) gebündelt . Der Betrieb basiert auf anderen im JDK bereitgestellten eigenständigen Tools wie JConsole , jstat , jstack , jinfo und jmap .

Unten sehen Sie eine einfache Übersichtsoberfläche einer laufenden Profilerstellungssitzung mit Java VisualVM:

Profilierung der lokalen JavacatVM-Tomcat-Server-App

Ein interessanter Vorteil von Java VisualVM ist, dass wir es erweitern können, um neue Funktionen als Plugins zu entwickeln . Wir können diese Plugins dann zum integrierten Update Center von Java VisualVM hinzufügen.

Java VisualVM unterstützt lokale und Remote-Profilerstellung sowie Speicher- und CPU-Profilerstellung. Für die Verbindung zu Remote-Anwendungen müssen Anmeldeinformationen (Hostname / IP und Kennwort nach Bedarf) angegeben werden , das SSH-Tunneling wird jedoch nicht unterstützt . Wir können auch die Echtzeitprofilerstellung mit sofortigen Aktualisierungen aktivieren (normalerweise alle 2 Sekunden).

Unten sehen Sie den Speicherausblick einer Java-Anwendung, die mit Java VisualVM profiliert wurde:

Java VisualVM-Speicherheap-Histogramm

Mit der Snapshot-Funktion von Java VisualVM können wir Snapshots von Profiling-Sitzungen zur späteren Analyse erstellen .

5. NetBeans Profiler

Der NetBeans Profiler wird mit der Open Source NetBeans IDE von Oracle gebündelt .

Obwohl dieser Profiler viele Ähnlichkeiten mit Java VisualVM aufweist , ist er eine gute Wahl, wenn alles in einem Programm (IDE + Profiler) enthalten sein soll.

Alle anderen oben diskutierten Profiler bieten Plugins zur Verbesserung der IDEs-Integration.

Der folgende Screenshot zeigt ein Beispiel für die NetBeans Profiler-Oberfläche:

Netbeans Profiler-Telemetrieschnittstelle

Netbeans Profiler ist auch eine gute Wahl für die einfache Entwicklung und Profilerstellung . NetBeans Profiler bietet ein einziges Fenster zum Konfigurieren und Steuern der Profilerstellungssitzung und zum Anzeigen der Ergebnisse. Es bietet eine einzigartige Funktion, um zu wissen, wie oft die Speicherbereinigung erfolgt .

6. Andere Solid Profiler

Einige ehrenwerte Erwähnungen sind Java Mission Control, New Relic und Prefix (von Stackify) - diese haben insgesamt weniger Marktanteile, verdienen aber definitiv eine Erwähnung. Das Präfix von Stackify ist beispielsweise ein hervorragendes, leichtes Profiling-Tool, das sich gut zum Profiling nicht nur von Java-Anwendungen, sondern auch von anderen Webanwendungen eignet.

7. Fazit

In diesem Artikel haben wir uns mit Profiling und Java Profilern befasst. Wir haben uns die Funktionen der einzelnen Profiler angesehen und herausgefunden, was die potenzielle Auswahl eines Profilers gegenüber dem anderen beeinflusst.

Es gibt viele Java-Profiler mit einigen einzigartigen Eigenschaften. Die Auswahl des zu verwendenden Java-Profilers hängt, wie wir in diesem Artikel gesehen haben, hauptsächlich von der Auswahl der Tools eines Entwicklers, der erforderlichen Analyseebene und den Funktionen des Profilers ab.