Überwachung der virtuellen Java-Maschine (JVM)
Mit Instana können Sie Ihre virtuelle Java-Maschine (JVM) umfassend überwachen, um Engpässe zu erkennen und die Leistung zu optimieren. Um die JVM zu überwachen, installieren Sie den Instana-Host-Agenten. Nach der Installation des Agenten wird der Instana Java-Sensor automatisch aktiviert und sammelt Echtzeit-Metriken und Tracing-Daten, die Sie in der Instana-Benutzeroberfläche anzeigen können.
Der Java-Sensor bietet automatisierte Code-Instrumentierung für unterstützte Technologien, Zero-Configuration Health Monitoring von JVM-Instanzen und End-to-End-Traces von Anfragen über alle Systeme hinweg.
Unterstützte Informationen
Der Java-Sensor unterstützt die folgenden Sprachen, Betriebssysteme und Laufzeiten:
Unterstützte Sprachen
Der Sensor unterstützt die folgenden Sprachen:
- Clojure
- Java
- Kotlin
- Scala
Unterstützte Betriebssysteme
Der Java-Sensor unterstützt die Betriebssysteme, die mit den Anforderungen der Host-Agenten übereinstimmen. Diese können im Abschnitt Unterstützte Betriebssysteme des jeweiligen Host-Agenten überprüft werden, z. B. Unterstützte Betriebssysteme für Unix.
Unterstützte Java-Distributionen und -Laufzeiten
Informationen über unterstützte Java-Distributionen und -Laufzeiten finden Sie unter Systemanforderungen.
Unterstützte Frameworks und Bibliotheken für die Ablaufverfolgung
Der Java-Sensor verwendet mehrere Frameworks und Bibliotheken für die Ablaufverfolgung. Weitere Informationen finden Sie unter Instrumentierte Frameworks und Bibliotheken.
Systemvoraussetzungen
Stellen Sie vor der Installation des Instana-Agenten sicher, dass die erforderlichen Systemanforderungen erfüllt sind. Weitere Informationen finden Sie unter Systemanforderungen.
Instanzagenten installieren
Um die JVM zu überwachen, müssen Sie den Instana-Host-Agenten installieren. Weitere Informationen finden Sie unter Installation von Host-Agenten. Der Agent setzt den Java-Sensor automatisch ein, konfiguriert und installiert ihn. Um sicherzustellen, dass Ihre Java-Anwendungen instrumentiert sind, stellen Sie sicher, dass Ihre JVM-Distribution unterstützt wird.
Versuchen Sie nicht, Agenten von mehreren Anbietern gleichzeitig zu verwenden. Es kann zu unvorhersehbaren Ergebnissen kommen, die zum Scheitern der Anwendung führen können. Weitere Informationen finden Sie unter Unverträgliche Mittel.
JVMs von der Überwachung ausschließen
Um die Anbindung des Instana-Agenten an eine JVM zu vermeiden, können Sie die INSTANA_IGNORE
umgebungsvariable auf true
in Ihrer JVM-Umgebung setzen.
Optional: Konfigurieren des Sensors
Nachdem Sie den Instana-Agenten installiert haben, wird der Java-Sensor automatisch installiert und konfiguriert. Obwohl Sie für Out-of-the-Box-Metriken und verteiltes Tracing keine Konfiguration benötigen, können Sie einzelne Komponenten des Sensors konfigurieren.
Weitere Informationen zur Konfiguration des Sensors finden Sie unter Java-Konfiguration.
Nachdem der Java-Sensor konfiguriert ist, beginnt er automatisch mit der Erfassung von Metriken aus der JVM. Sie können diese Metriken in der Instana-Benutzeroberfläche anzeigen. Der Java-Sensor unterstützt auch andere Funktionen von Instana wie automatisches Tracing, benutzerdefiniertes Tracing und automatisches Profiling.
Messdatenerfassung
Der Java-Sensor überwacht die JVM-Instanz und sammelt die folgenden Metriken von ihr:
- Konfigurationsdaten
- Leistungsmesswerte
- Signaturen Allgemeinzustand
- Angepasste Messdaten
- Andere Metriken
Führen Sie die folgenden Schritte aus, um diese Metriken anzuzeigen:
- Wählen Sie in der Seitenleiste der Instana-Benutzeroberfläche die Option Infrastruktur.
- Klicken Sie auf einen bestimmten überwachten Host.
Das JVM-Dashboard zeigt alle gesammelten Metriken für die JVM-Instanz an.
Konfigurationsdaten
In der folgenden Tabelle sind die Konfigurationsdaten aufgeführt, die von der JVM-Instanz gesammelt werden:
Konfiguration | Beschreibung |
---|---|
Java-Version | Die Java-Version. |
Java Runtime | Das Java Runtime Environment (JRE). |
Maximaler Heapspeicher | Die maximale Größe des für die JVM verfügbaren Heapspeichers. |
Klassenpfad | Der in der JVM eingestellte Klassenpfadparameter. |
Leistungsmetriken
In der folgenden Tabelle sind die Leistungsdaten aufgeführt, die von der JVM-Instanz erfasst werden:
Leistungsmetriken | Beschreibung | Datenpunkt |
---|---|---|
Belegter Speicher | Der Gesamtspeicher, der von der JVM verwendet wird. Der aktuelle gemessene KPI-Wert wird angezeigt. | Die Anzahl der Bytes wird von java.lang.Runtime#totalMemory erfasst. |
Threads | Anzahl der Threads, die sich in verschiedenen Zuständen befinden: new , runnable , timed-waiting , waiting , oder blocked . Die Werte werden in einem Diagramm über einen ausgewählten Zeitraum angezeigt. |
- Aktuelle Thread-IDs werden von java.lang.management.ThreadMXBean#getAllThreadIds gesammelt. - Thread-Zustände werden von ThreadMXBean#getThreadInfo gesammelt. |
Heapspeicher | Die maximale Größe des für die JVM verfügbaren Heapspeichers. | - Die Anzahl der Bytes wird wie folgt berechnet: java.lang.Runtime#totalMemory - java.lang.Runtime#freeMemory . - Die maximale Heap-Größe, die im Diagramm angezeigt wird, wird entweder durch Parsen des Befehlszeilenparameters -Xmx bestimmt oder aus java.lang.Runtime#maxMemory ermittelt. - Der prozentuale Anteil des genutzten Heap-Speichers am gesamten Heap-Speicher. |
Speicherpools | Die Speicherpoolnutzung von Heap- und Non-Heap-Pools wird in einem Diagramm über einen ausgewählten Zeitraum angezeigt. | - Die Pool-Informationen werden unter ManagementFactory#getMemoryPoolMXBeans gesammelt. - Die Diagrammwerte werden von jedem Pool unter java.lang.management.MemoryUsage gesammelt. - Der Maximalwert wird unter getMax , der Anfangswert unter getInit und der aktuelle Wert unter getUsage erfasst. |
Garbage-Collection | Die Werte der Garbage-Collection-Aktivierung und -Laufzeit werden in einem Diagramm über einen ausgewählten Zeitraum angezeigt. | - Informationen zur Garbage Collection werden von ManagementFactory#getGarbageCollectorMXBeans gesammelt. - Graphwerte werden von jedem Collector java.lang.management.GarbageCollectorMXBean gesammelt. - Die Laufzeit der Garbage Collection wird von getCollectionTime gesammelt, was laut Javadoc die ungefähre verstrichene Zeit in Millisekunden für die kumulierte Garbage Collection ist. - Die Anzahl der Aufrufe wird von getCollectionCount erfasst. - Die beiden Werte getCollectionTime und getCollectionCount sind die berechnete Differenz während 1 Sekunde. |
Aussetzung | Verzögerung bei der Anwendungsausführung, die in einem Diagramm über einen ausgewählten Zeitraum angezeigt wird. | Berechnet gemäß dem Instana-Messfaden. |
Signaturen für Allgemeinzustand
Jeder Sensor verfügt über eine kuratierte Wissensbasis von Gesundheitssignaturen, die kontinuierlich anhand der eingehenden Metriken bewertet werden. Diese Gesundheitssignaturen werden verwendet, um Probleme oder Vorfälle zu melden, die von den Auswirkungen auf den Benutzer abhängen.
Integrierte Ereignisse lösen Probleme oder Vorfälle auf der Grundlage von fehlenden Zustands-Signaturen für Entitäten aus, und benutzerdefinierte Ereignisse lösen Probleme oder Vorfälle auf der Grundlage der Schwellenwerte einer individuellen Metrik einer beliebigen Entität aus.
Weitere Informationen zu den eingebauten Ereignissen für den Java-Sensor finden Sie in der Referenz zu eingebauten Ereignissen.
Angepasste Messdaten
Instana unterstützt einige gängige Java-Bibliotheken für Metriken. Wenn Sie die folgenden Bibliotheken verwenden, können Sie Ihren Anwendungscode manuell instrumentieren, um benutzerdefinierte Metriken zu erfassen:
Weitere Informationen finden Sie unter Benutzerdefinierte Ablaufverfolgung.
Andere Metriken
Neben Konfigurations-, Leistungs- und benutzerdefinierten Metriken sammelt der Java-Sensor auch andere Metriken, wie z. B. Live-Thread-Dump und Heap-Dump.
Live-Thread-Speicherauszug
Klicken Sie auf Threadspeicherauszug abrufen, um einen Live-Thread-Speicherauszug für die JVM anzuzeigen.
Heapspeicherauszug
Klicken Sie auf Heapspeicherauszug abrufen, um einen Heapspeicherauszug für die JVM zu erstellen. Um den Heap-Dump zu speichern, geben Sie einen Ort an, der lokal in der JVM liegt.
Verfolgung von Java-Anwendungen
Der Java-Sensor in Instana verwendet die folgenden Methoden, um Java-Anwendungen zu verfolgen:
- Instana AutoTrace : Automatisches Tracing von Java-Anwendungen ohne manuelle Konfiguration oder Codeänderungen.
- Benutzerdefiniertes Tracing : Manuelle Instrumentierung bestimmter Teile des Java-Anwendungscodes, um benutzerdefinierte Metriken zu erfassen und tiefere Einblicke zu gewinnen.
- Instana AutoProfile : Die automatische Profilerstellung von Java-Anwendungen liefert detaillierte Informationen über Leistung, CPU-Nutzung, Speicherzuweisung und andere Systemressourcen.
Instana AutoTrace
Standardmäßig überwacht der Java-Sensor alle Anfragen und erstellt automatisch eine verteilte Ablaufverfolgung für jede dieser Anfragen. Diese verteilte Verfolgung umfasst eine host- und sprachenübergreifende Verfolgung. Weitere Informationen finden Sie unter Instana AutoTrace™.
Sie können diese Spuren in der Instana-Benutzeroberfläche anzeigen. Weitere Informationen finden Sie unter Analysieren von Traces und Aufrufen.
Protokollierung
Sie können nur Protokolle der Ebene WARN
und höher anzeigen.
Wenn Log4j, Log4j2 oder Logback verwendet wird, um eine genauere Korrelation von Logging und Tracing zu ermöglichen, füllt Instana automatisch den Mapped Diagnostic Context (MDC) mit der Trace-ID. Der MDC-Variablenname lautet instana.trace.id
. Weitere Informationen über die Verwendung von Logging-Frameworks in Formatstrings finden Sie in der Dokumentation zu Ihrem Logging-Framework.
Angepasstes Tracing
Der Java-Sensor bietet eine vollautomatische, sofort einsatzbereite Tracing-Instrumentierung. Aber in manchen Fällen möchten Sie vielleicht lieber benutzerdefinierte Spuren an Ihr Instana-Dashboard senden. Sie können die folgenden Methoden verwenden, um eine benutzerdefinierte Ablaufverfolgung zu implementieren:
- Java-Trace-SDK
- Konfigurationsbasiertes Java-Trace-SDK
- Java OpenTracing-API
- OpenCensus-Trace-Exportfunktion von Instana
Java-Trace-SDK
Wenn Sie ein Framework instrumentieren möchten, das noch nicht von Instana unterstützt wird, oder die Anfragen einer benutzerdefinierten Anwendung überwachen möchten, verwenden Sie das Java Trace SDK und sehen Sie sich das GitHub Repo an.
Bevor Sie die benutzerdefinierte Ablaufverfolgung mit dem SDK implementieren, lesen Sie die Best Practices zur Ablaufverfolgung.
Konfigurationsbasiertes Java-Trace-SDK
Es kann Situationen geben, in denen die Verwendung des Java Trace SDK, die eine Manipulation des Quellcodes oder die Kontaktaufnahme mit jemandem, der das kann, nicht möglich oder wünschenswert ist. In diesen Fällen sollten Sie das konfigurationsbasierte Java Trace SDK verwenden. Obwohl weniger funktionsreich als das programmatische Java Trace SDK, ermöglicht das konfigurationsbasierte Java Trace SDK eine deklarative Konfiguration von Spans und Tags, die viele gängige Anwendungsfälle abdecken.
Bevor Sie die benutzerdefinierte Ablaufverfolgung mit dem konfigurationsbasierten Java Trace SDK implementieren, lesen Sie die Best Practices zur Ablaufverfolgung.
Java OpenTracing-API
Um Traces zu sammeln, die durch die OpenTracing beschrieben werden, müssen Sie Java OpenTracing verwenden. Weitere Informationen finden Sie unter OpenTracing.
Deaktivieren Sie die automatische Ablaufverfolgung (Instana AutoTrace™ ), bevor Sie die Java OpenTracing API verwenden. Weitere Informationen finden Sie unter Deaktivieren der automatischen Instrumentierung.
OpenCensus-Trace-Exportfunktion von Instana
Instana bietet einen OpenCensus Trace Exporter für Anwendungen, die in Java geschrieben sind. Durch die Verwendung der Instana-Agentenprozesse als Proxy leitet Instana Traces, die von Anwendungen exportiert werden, die mit Census instrumentiert sind, an sein Backend weiter.
Weitere Informationen finden Sie bei den OpenCensus Exportern.
Deaktivieren Sie die automatische Verfolgung (Instana AutoTrace™ ), wenn der Agent auf demselben Host wie Census verwendet wird. Weitere Informationen finden Sie unter Deaktivieren der automatischen Instrumentierung.
Instana AutoProfile
Profile sind für das Feststellen von Leistungsengpässen und Engpässen auf Codeebene unerlässlich. Sie sind maßgeblich an der Verringerung der Ressourcennutzung und der Verbesserung der Leistung beteiligt.
Instana AutoProfile™ generiert und meldet Prozessprofile an Instana. Im Gegensatz zu Profilern, die während der Entwicklungszeit oder bei Bedarf eingesetzt werden und bei denen Sie die Profilerstellung manuell initiieren müssen, plant AutoProfile™ automatisch die Profilerstellung und führt sie kontinuierlich durch, wie es für kritische Produktionsumgebungen angemessen ist. Weitere Informationen finden Sie in unseren Instana AutoProfile™.
Weitere Informationen finden Sie unter Instana AutoProfile™.
JVMs ausgenommen
Sie können die INSTANA_IGNORE
umgebungsvariable in Ihrer JVM-Umgebung auf true
setzen, um zu verhindern, dass der Instana Agent an die JVM angehängt wird.
Fehlerbehebung
Bei der Überwachung mit Instana können einige Probleme auftreten. Weitere Informationen finden Sie unter Fehlerbehebung.