Java-Profiler für Azure Monitor Application Insights

Hinweis

Das Java-Profiler-Feature befindet sich ab 3.4.0 in der Vorschauversion.

Der Application Insights-Java-Profiler bietet ein System für:

  • Bedarfsgesteuertes Generieren von JFR-Profilen (JDK Flight Recorder) von der Java Virtual Machine (JVM).
  • Automatisches Generieren von JFR-Profilen, wenn bestimmte Triggerbedingungen von der JVM erfüllt werden, z. B. wenn CPU oder Arbeitsspeicher einen konfigurierten Schwellenwert überschreiten.

Übersicht

Der Application Insights-Java-Profiler verwendet den von der JVM bereitgestellten JFR-Profiler, um Daten für die Profilerstellung aufzuzeichnen. Benutzer können die JFR-Aufzeichnungen zu einem späteren Zeitpunkt herunterladen und analysieren, um die Ursache von Leistungsproblemen zu ermitteln.

Diese Daten werden bedarfsgesteuert gesammelt, wenn die Triggerbedingungen erfüllt sind. Die verfügbaren Trigger sind Schwellenwerte für CPU-Auslastung, Arbeitsspeichernutzung und Anforderung (Trigger für Vereinbarung zum Servicelevel). Anforderungstrigger überwachen Spans, die von OpenTelemetry generiert wurden, und ermöglichen es dem Benutzer, Anforderungen an die Vereinbarung zum Servicelevel (SLA) über die Dauer dieser Spans zu konfigurieren.

Wenn ein Schwellenwert erreicht wird, wird ein Profil des konfigurierten Typs und der konfigurierten Dauer erfasst und hochgeladen. Dieses Profil wird dann im Bereich „Leistung“ der zugehörigen Benutzeroberfläche des Application Insights-Portals angezeigt.

Warnung

Der JFR-Profiler führt standardmäßig das Profil „profile-without-env-data“ aus. Eine JFR-Datei ist eine Reihe von Ereignissen, die von der JVM ausgegeben werden. Die Konfiguration „profile-without-env-data“ ähnelt der „profile“-Konfiguration, die mit der JVM ausgeliefert wird. Es wurden jedoch einige Ereignisse deaktiviert, die vertrauliche Informationen über die Bereitstellung enthalten könnten, z. B. Umgebungsvariablen, Argumente, die der JVM zur Verfügung gestellt werden, und Prozesse, die auf dem System ausgeführt werden.

Zu den Flags, die nicht mehr verfügbar sind, gehören:

  • jdk.JVMInformation
  • jdk.InitialSystemProperty
  • jdk.OSInformation
  • jdk.InitialEnvironmentVariable
  • jdk.SystemProcess

Sie sollten jedoch alle aktivierten Flags überprüfen, um sicherzustellen, dass die Profile keine vertraulichen Daten enthalten.

Weitere Informationen zum Festlegen einer benutzerdefinierten Profiler-Konfiguration finden Sie unter Konfigurieren von Profilinhalten.

Voraussetzungen

  • JVM mit JFR-Funktion (Java Flight Recorder)
    • Java 8 Update 262+
    • Java 11+

Warnung

OpenJ9 JVM wird nicht unterstützt

Verwendung

Auslöser

Eine ausführlichere Beschreibung der verfügbaren Trigger finden Sie in der Profiler-Übersicht.

Der ApplicationInsights-Java-Agent überwacht CPU, Arbeitsspeicher und Anforderungsdauer, z. B. eine Geschäftstransaktion. Wenn ein konfigurierter Schwellenwert überschritten wird, wird ein Profil ausgelöst.

Jetzt Profil erstellen

Eine Schaltfläche Jetzt Profil erstellen befindet sich innerhalb der Benutzeroberfläche des Profilers (siehe Profilereinstellungen). Wenn Sie diese Schaltfläche auswählen, wird sofort ein Profil in allen Agents angefordert, die an die Application Insights-Instanz angefügt sind. Die Standardmäßige Profilerstellungsdauer beträgt zwei Minuten. Sie können sie ändern, indem Sie periodicRecordingDurationSeconds überschreiben (siehe Konfigurationsdatei).

Warnung

Beim Aufrufen von „Jetzt Profil erstellen“ wird das Profilerfeature aktiviert, und Application Insights wendet standardmäßige CPU- und Arbeitsspeicher-SLA-Trigger an. Wenn Ihre Anwendung diese SLAs verletzt, sammelt Application Insights Java-Profile. Wenn Sie die Profilerstellung später deaktivieren möchten, können Sie dies im Triggermenü unter Installation tun.

CPU

Der CPU-Schwellenwert ist ein Prozentsatz der Nutzung aller verfügbaren Kerne des Systems.

Wenn z. B. ein Kern eines Computers, der acht Kerne umfasst, ausgelastet wäre, würde der CPU-Prozentsatz 12,5 % betragen.

Arbeitsspeicher

Der Prozentsatz des Arbeitsspeichers ist die aktuelle Belegung der Tenured-Speicherregion (OldGen) im Verhältnis zur maximal möglichen Größe der Region.

Die Belegung wird ausgewertet, nachdem eine Tenured-Sammlung durchgeführt wurde. Die maximale Größe der Tenured-Region ist die Größe, die sie aufweisen würde, wenn der JVM-Heap (Java Virtual Machine) auf seine maximale Größe anwächst.

Nehmen Sie beispielsweise das folgende Szenario:

  • Der Java-Heap kann auf maximal 1.024 MB anwachsen.
  • Die Tenured Generation könnte auf 90 % des Heaps anwachsen.
  • Die maximal mögliche Größe der Tenured-Generation würde 922 MB betragen.
  • Ihr Schwellenwert wurde über die Benutzeroberfläche auf 75 % festgelegt, daher wäre Ihr Schwellenwert 75 % von 922 MB, also 691 MB.

In diesem Szenario gibt es unter folgenden Umständen ein Profil:

  • Vollständige Garbage Collection wird ausgeführt.
  • Die Belegung der Tenured-Regionen liegt nach der Erfassung über 691 MB.

Anfordern

SLA-Trigger basieren auf OpenTelemetry und initiieren ein Profil, wenn bestimmte Kriterien erfüllt sind.

Jede einzelne Triggerkonfiguration wird wie folgt gebildet:

  • Name: Ein eindeutiger Bezeichner für den Trigger.
  • Filter: Filtert die Anforderungen, die für den Trigger von Interesse sind.
  • Aggregation – Berechnet das Verhältnis von Anforderungen, die einen bestimmten Schwellenwert überschritten haben.
    • Threshold – Ein Mindestwert (in Millisekunden), bei dem eine Anforderungsverletzung festgestellt wird.
    • Minimum samples – Die Mindestanzahl von Stichproben, die gesammelt werden müssen, damit die Aggregation Daten erzeugt. Diese Einstellung verhindert das Auslösen kleiner Stichprobengrößen.
    • Window: Rollzeitfenster (in Millisekunden).
  • Threshold: Der Schwellenwert (Prozentsatz), der auf die Aggregationsausgabe angewendet wird. Wenn dieser Wert überschritten wird, wird ein Profil initiiert.

Zum Beispiel würde das folgende Szenario ein Profil auslösen, wenn Folgendes eintritt: Mehr als 75 % der Anforderungen an einen bestimmten Endpunkt (/users/.*) dauern länger als 30 ms innerhalb eines 60-Sekunden-Fensters, wenn mindestens 100 Beispiele gesammelt wurden.

Screenshot des Beispiels eines angeforderten Triggers

Installation

Die folgenden Schritte führen Sie durch die Aktivierung der Profilerstellungskomponente auf dem Agent und die Konfiguration von Ressourcenlimits, die bei Überschreitung ein Profil auslösen.

  1. Konfigurieren Sie die Ressourcenschwellenwerte, ab denen ein Profil erfasst wird:

    1. Navigieren Sie zum Abschnitt „Leistung -> Profiler“ in der Application Insights-Instanz. Screenshot des Links zum Öffnen des Bereichs „Leistung“.Screenshot der Schaltfläche „Profiler“ im Bereich „Leistung“

    2. Wählen Sie „Trigger“ aus.

    3. Konfigurieren Sie die erforderlichen CPU-, Arbeitsspeicher- oder Anforderungstrigger (falls aktiviert), und wählen Sie „Anwenden“ aus. Screenshot der Triggereinstellungen

Warnung

Der Java-Profiler unterstützt den Trigger „Sampling“ nicht. Die Konfiguration dieser Option hat keine Auswirkungen.

Nachdem diese Schritte abgeschlossen sind, überwacht der Agent die Ressourcennutzung Ihres Prozesses und löst ein Profil aus, wenn der Schwellenwert überschritten wird. Wenn ein Profil ausgelöst und abgeschlossen wird, können Sie es in der Application Insights-Instanz im Bereich „Leistung -> Profiler“ anzeigen. Von diesem Bildschirm aus kann das Profil heruntergeladen werden. Nach dem Herunterladen kann die JFR-Aufzeichnungsdatei mit einem Tool Ihrer Wahl, z. B. Oracle JDK Mission Control (JMC), geöffnet und analysiert werden.

Screenshot von Funktionen und Einstellungen der Profilenseite..

Konfiguration

Die Konfiguration der Einstellungen für die Auslösung des Profilers, z. B. Schwellenwerte und Zeiträume für die Profilerstellung, werden auf der Application Insights-Benutzeroberfläche unter der Benutzeroberfläche für Leistung, Profiler und Trigger festgelegt, wie in Installation beschrieben.

Darüber hinaus können viele Parameter mithilfe von Umgebungsvariablen und der Konfigurationsdatei applicationinsights.json konfiguriert werden.

Konfigurieren von Profilinhalten

Wenn Sie eine benutzerdefinierte Profilkonfiguration bereitstellen möchten, ändern Sie die memoryTriggeredSettings und cpuTriggeredSettings, um den Pfad zu einer .jfc-Datei mit Ihrer gewünschten Konfiguration bereitzustellen.

Profile können auf der JMC-Benutzeroberfläche (JDK Mission Control) unter dem Menü Window->Flight Recording Template Manager generiert/bearbeitet werden und die Kontrolle über einzelne Flags befindet sich innerhalb Edit->Advanced dieser Benutzeroberfläche.

Umgebungsvariablen

  • APPLICATIONINSIGHTS_PREVIEW_PROFILER_ENABLED: boolesch (Standard: true) Aktiviert/Deaktiviert das Feature zur Profilerstellung. Standardmäßig ist das Feature innerhalb des Agents aktiviert (seit Agent 3.4.9). Obwohl dieses Feature im Agent aktiviert ist, werden Profile erst erfasst, wenn sie im Portal aktiviert sind, wie unter Installation beschrieben.

Konfigurationsdatei

Beispielkonfiguration:

{
  "preview": {
    "profiler": {
      "enabled": true,
      "cpuTriggeredSettings": "profile-without-env-data",
      "memoryTriggeredSettings": "profile-without-env-data",
      "manualTriggeredSettings": "profile-without-env-data",
      "enableRequestTriggering": true,
      "periodicRecordingDurationSeconds": 60
    }
  }
}

memoryTriggeredSettings: Diese Konfiguration wird verwendet, wenn ein Arbeitsspeicherprofil angefordert wird. Dieser Wert kann einer der folgenden sein:

  • profile-without-env-data (Standardwert). Ein Profil, bei dem bestimmte vertrauliche Ereignisse deaktiviert sind. Weitere Informationen finden Sie im Abschnitt „Warnung“.
  • profile. Verwendet die profile.jfc-Konfiguration, die mit JFR ausgeliefert wird.
  • Ein Pfad zu einer benutzerdefinierten jfc-Konfigurationsdatei im Dateisystem, z. B. /tmp/myconfig.jfc.

cpuTriggeredSettings: Diese Konfiguration wird verwendet, wenn ein CPU-Profil angefordert wird. Dieser Wert kann einer der folgenden sein:

  • profile-without-env-data (Standardwert). Ein Profil, bei dem bestimmte vertrauliche Ereignisse deaktiviert sind. Weitere Informationen finden Sie im Abschnitt „Warnung“.
  • profile. Verwendet die profile.jfc-jfc-Konfiguration, die mit JFR ausgeliefert wird.
  • Ein Pfad zu einer benutzerdefinierten jfc-Konfigurationsdatei im Dateisystem, z. B. /tmp/myconfig.jfc.

manualTriggeredSettings: Diese Konfiguration wird verwendet, wenn ein manuelles Profil angefordert wird. Dieser Wert kann einer der folgenden sein:

  • profile-without-env-data (Standardwert). Ein Profil, bei dem bestimmte vertrauliche Ereignisse deaktiviert sind. Weitere Informationen finden Sie im Abschnitt „Warnung“.
  • profile. Verwendet die profile.jfc-jfc-Konfiguration, die mit JFR ausgeliefert wird.
  • Ein Pfad zu einer benutzerdefinierten jfc-Konfigurationsdatei im Dateisystem, z. B. /tmp/myconfig.jfc.

enableRequestTriggering Gibt an, ob die JFR-Profilerstellung basierend auf der Anforderungskonfiguration ausgelöst werden soll. Dieser Wert kann einer der folgenden sein:

  • true: Die Profilerstellung wird ausgelöst, wenn der Schwellenwert eines Anforderungstriggers überschritten wird.
  • false (Standardwert). Die Anforderungskonfiguration löst keine Profilerstellung aus.

periodicRecordingDurationSeconds Aufzeichnungsdauer der Profilerstellung in Sekunden, wenn die Sitzung einer Profilerstellung mithilfe der Schaltfläche Jetzt Profil erstellen gestartet wird. Der Standardwert ist 120.

Häufig gestellte Fragen

Was ist die Azure Monitor Application Insights-Java-Profilerstellung?

Der Azure Monitor Application Insights-Java-Profiler verwendet Java Flight Recorder (JFR), um ein Profil Ihrer Anwendung mithilfe einer benutzerdefinierten Konfiguration zu erstellen.

Was ist Java Flight Recorder?

Java Flight Recorder (JFR) ist ein Tool zum Sammeln von Profilerstellungsdaten einer ausgeführten Java-Anwendung. JFR ist in der Java Virtual Machine (JVM) integriert und wird zum Beheben von Leistungsproblemen verwendet. Erfahren Sie mehr über die Java SE JFR Runtime.

Wie hoch sind die Kosten und/oder Lizenzgebühren für die Aktivierung von App Insights-Java-Profilerstellung?

Die Java-Profilerstellung ist ein kostenloses Feature von Application Insights. Die Preise für Azure Monitor Application Insights basieren auf den Erfassungskosten.

Welche Java-Profilerstellungsinformationen werden erfasst?

Zu den vom JFR gesammelten Profilerstellungsdaten gehören: Methoden- und Ausführungsprofilerstellungsdaten, Garbage Collection-Daten und Sperrprofile.

Wie kann ich die App Insights-Java-Profilerstellung verwenden und die Daten visualisieren?

JFR-Aufzeichnungen können mit Ihrem bevorzugten Tool angezeigt und analysiert werden, z. B. Java Mission Control (JMC).

Werden mit der App Insights-Java-Profilerstellung Leistungsdiagnosen und Empfehlungen zur Behebung von Problemen bereitgestellt?

„Leistungsdiagnose und Empfehlungen“ ist ein neues Feature, das in Kürze als Application Insights-Java-Diagnose verfügbar sein wird. Sie können sich für eine Vorschau dieses Features registrieren. Die JFR-Aufzeichnung kann mit Java Mission Control (JMC) angezeigt werden.

Was ist der Unterschied zwischen der bedarfsgesteuerten und der automatischen Java-Profilerstellung in App Insights?

Die bedarfsgesteuerte Profilerstellung erfolgt durch den Benutzer in Echtzeit, während die automatische Profilerstellung mit vorkonfigurierten Triggern erfolgt.

Verwenden Sie Jetzt Profil erstellen für die Option zur bedarfsgesteuerten Profilerstellung. Jetzt Profil erstellen erstellt sofort ein Profil aller Agents, die mit der Application Insights-Instanz verbunden sind.

Die automatisierte Profilerstellung wird durch die Überschreitung eines Ressourcenschwellenwerts ausgelöst.

Welche Trigger für die Java-Profilerstellung kann ich konfigurieren?

Der Application Insights-Java-Agent unterstützt derzeit die Überwachung von CPU- und Arbeitsspeicherverbrauch. Der CPU-Schwellenwert wird als Prozentsatz aller verfügbaren Kerne auf dem Computer konfiguriert. Der Arbeitsspeicher ist die aktuelle Belegung der Tenured-Speicherregion (OldGen) im Verhältnis zur maximal möglichen Größe der Region.

Welche Voraussetzungen müssen erfüllt sein, um die Java-Profilerstellung zu aktivieren?

Überprüfen Sie die Voraussetzungen am Anfang dieses Artikels.

Kann ich die Java-Profilerstellung für eine Microservices-Anwendung verwenden?

Ja, Sie können für eine JVM, die Microservices mithilfe von JFR ausführt, ein Profil erstellen.