Dela via


Azure Monitor Application Insights Profiler för Java

Kommentar

Java Profiler-funktionen är i förhandsversion från och med 3.4.0.

Java Profiler tillhandahåller ett system för:

  • Generera JDK Flight Recorder-profiler (JFR) på begäran från JVM (Java Virtual Machine).
  • Generera JFR-profiler automatiskt när vissa utlösarvillkor uppfylls från JVM, till exempel CPU eller minne som överskrider ett konfigurerat tröskelvärde.

Översikt

Java Profiler använder JFR-profileraren som tillhandahålls av JVM för att registrera profileringsdata, så att användarna kan ladda ned JFR-inspelningarna vid ett senare tillfälle och analysera dem för att identifiera orsaken till prestandaproblem.

Dessa data samlas in på begäran när utlösarvillkor uppfylls. De tillgängliga utlösarna är tröskelvärden för cpu-användning, minnesförbrukning och begäran (tjänstnivåavtalsutlösare). Begärandeutlösare övervakar Spans som genereras av OpenTelemetry och tillåter användaren att konfigurera servicenivåavtalskrav (SLA) under varaktigheten för dessa spann.

När ett tröskelvärde nås samlas en profil av den konfigurerade typen och varaktigheten in och laddas upp. Den här profilen visas sedan i prestandafönstret i det associerade Application Insights Portal-användargränssnittet.

Varning

JFR-profileraren kör som standard profilen "profile-without-env-data". En JFR-fil är en serie händelser som genereras av JVM. Konfigurationen "profile-without-env-data" liknar den profilkonfiguration som levereras med JVM, men har inaktiverat vissa händelser som kan innehålla känslig distributionsinformation, till exempel miljövariabler, argument som tillhandahålls till JVM och processer som körs i systemet.

Flaggorna som inte längre är tillgängliga är:

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

Du bör dock granska alla aktiverade flaggor för att säkerställa att profiler inte innehåller känsliga data.

Se Konfigurera profilinnehåll när du anger en anpassad profileringskonfiguration.

Förutsättningar

  • JVM med JFR-kapacitet (Java Flight Recorder)

    • Java 8-uppdatering 262+
    • Java 11+

Varning

OpenJ9 JVM stöds inte

Förbrukning

Utlösare

Mer detaljerad beskrivning av de olika utlösare som är tillgängliga finns i Profilproduktionsprogram i Azure med Application Insights Profiler för .NET.

ApplicationInsights Java-agenten övervakar cpu-, minnes- och begärandevaraktighet, till exempel en affärstransaktion. Om det överskrider ett konfigurerat tröskelvärde utlöses en profil.

Profil nu

Knappen Profil nu finns i användargränssnittet profiler (se Konfigurera Application Insights Profiler för .NET). Om du väljer den här knappen begärs omedelbart en profil i alla agenter som är kopplade till Application Insights-instansen. Standardvaraktigheten för profilering är två minuter. Du kan ändra det genom att periodicRecordingDurationSeconds åsidosätta (se Konfigurationsfil).

Varning

Om du anropar profilen nu aktiveras profileringsfunktionen, och Application Insights tillämpar standardutlösare för CPU och minne. När ditt program bryter mot dessa serviceavtal samlar Application Insights in Java-profiler. Om du vill inaktivera profilering senare kan du göra det i utlösarmenyn som visas i Installation.

CPU

Cpu-tröskelvärdet är en procentandel av användningen av alla tillgängliga kärnor i systemet.

Om en kärna av en åttakärnig dator till exempel var mättad skulle CPU-procentandelen betraktas som 12,5 %.

Minne

Minnesprocent är den aktuella tidsens minnesregionen (OldGen) mot regionens maximala möjliga storlek.

Beläggningen utvärderas efter att en samling över tidsenlighet har utförts. Den maximala storleken för den tidsbetingade regionen är den storlek det skulle vara om JVM-heapen (Java Virtual Machine) växte till sin maximala storlek.

Anta till exempel följande scenario:

  • Java-heapen kan växa till högst 1 024 MB.
  • Tenured Generation kan växa till 90% av högen.
  • Den maximala möjliga storleken för besittningsrätt skulle vara 922 MB.
  • Tröskelvärdet angavs via användargränssnittet till 75 %, därför skulle tröskelvärdet vara 75 % av 922 mb, 691 mb.

I det här scenariot sker en profil under följande omständigheter:

  • Fullständig skräpinsamling körs
  • Beläggningen för tenured-regioner är över 691 mb efter samlingen

Förfrågan

SLA-utlösare baseras på OpenTelemetry och de initierar en profil om vissa kriterier uppfylls.

Varje enskild utlösarkonfiguration skapas på följande sätt:

  • Name – En unik identifierare för utlösaren.
  • Filter – Filtrerar intressebegäranden för utlösaren.
  • Aggregation – Beräknar förhållandet mellan begäranden som har överskridit ett visst tröskelvärde.
    • Threshold - Ett minimivärde (i millisekunder) där en överträdelse av begäran fastställs ske.
    • Minimum samples - Det minsta antalet prover som måste samlas in för aggregering för att producera data, är den här inställningen för att förhindra utlösning av små urvalsstorlekar.
    • Window – Rullande tidsfönster (i millisekunder).
  • Threshold – Tröskelvärdet (procent) som tillämpas på aggregeringsutdata. Om det här värdet överskrids initieras en profil.

Följande scenario utlöser till exempel en profil om mer än 75 % av begäranden till en specifik slutpunkt (/användare/.*) tar längre tid än 30 ms inom ett 60-sekundersfönster, när minst 100 exempel samlades in.

Skärmbild av exempel på utlösare för begäran

Installation

Följande steg vägleder dig genom att aktivera profilkomponenten på agenten och konfigurera resursgränser som utlöser en profil om den överträds.

Konfigurera de resurströsklar som gör att en profil samlas in:

  1. Bläddra till avsnittet Prestanda ->Profiler i Application Insights-instansen.

    Skärmbild av länken för att öppna prestandafönstret.Skärmbild av knappen Profiler från fönstret Prestanda.

  2. Välj utlösare

  3. Konfigurera de processor-, minnes- eller begärandeutlösare som krävs (om det är aktiverat) och välj Använd.

    Skärmbild av utlösarinställningar.

Varning

Java Profiler stöder inte utlösaren "Sampling". Att konfigurera detta har ingen effekt.

När de här stegen har slutförts övervakar agenten resursanvändningen i din process och utlöser en profil när tröskelvärdet överskrids. När en profil utlöses och slutförs kan den visas från Application Insights-instansen i avsnittet Prestanda ->Profiler . Från den skärmen kan profilen laddas ned, när du har laddat ned JFR-inspelningsfilen kan öppnas och analyseras inom ett verktyg som du väljer, till exempel Oracle JDK Mission Control (JMC).

Skärmbild av profileringssidans funktioner och inställningar.

Konfiguration

Konfiguration av Java Profiler-utlösarinställningar, till exempel tröskelvärden och profileringsperioder, anges i Application Insights-användargränssnittet under Performance>Profiler-utlösare> enligt beskrivningen i Installation.

Dessutom kan många parametrar konfigureras med hjälp av miljövariabler och konfigurationsfilen applicationinsights.json .

Konfigurera profilinnehåll

Om du vill ange en anpassad profilkonfiguration ändrar memoryTriggeredSettingsdu och cpuTriggeredSettings anger sökvägen till en .jfc fil med den konfiguration som krävs.

Profiler kan genereras/redigeras i JDK Mission Control-användargränssnittet (JMC) under Window->Flight Recording Template Manager menyn och kontroll över enskilda flaggor finns i Edit->Advanced det här användargränssnittet.

Miljövariabler

  • APPLICATIONINSIGHTS_PREVIEW_PROFILER_ENABLED: boolesk (standard: true)

    Aktiverar/inaktiverar profileringsfunktionen. Som standard är funktionen aktiverad i agenten (sedan agent 3.4.9). Men även om den här funktionen är aktiverad i agenten samlas inte profiler in om de inte är aktiverade i portalen enligt beskrivningen i Installation.

Konfigurationsfil

Exempelkonfiguration:

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

memoryTriggeredSettings Den här konfigurationen används om en minnesprofil begärs. Det här värdet kan vara något av:

  • profile-without-env-data (standardvärde). En profil med vissa känsliga händelser inaktiverade finns i avsnittet Varning för mer information.
  • profile. Använder konfigurationen profile.jfc som levereras med JFR.
  • En sökväg till en anpassad jfc-konfigurationsfil i filsystemet, till exempel /tmp/myconfig.jfc.

cpuTriggeredSettings Den här konfigurationen används om en cpu-profil begärs. Det här värdet kan vara något av:

  • profile-without-env-data (standardvärde). En profil med vissa känsliga händelser inaktiverade finns i avsnittet Varning för mer information.
  • profile. Använder jfc-konfigurationen profile.jfc som levereras med JFR.
  • En sökväg till en anpassad jfc-konfigurationsfil i filsystemet, till exempel /tmp/myconfig.jfc.

manualTriggeredSettings Den här konfigurationen används om en manuell profil begärs. Det här värdet kan vara något av:

  • profile-without-env-data (standardvärde). En profil med vissa känsliga händelser inaktiverade finns i avsnittet Varning för mer information.
  • profile. Använder jfc-konfigurationen profile.jfc som levereras med JFR.
  • En sökväg till en anpassad jfc-konfigurationsfil i filsystemet, till exempel /tmp/myconfig.jfc.

enableRequestTriggering Om JFR-profilering ska utlösas baserat på konfiguration av begäranden. Det här värdet kan vara något av:

  • true Profilering utlöses om ett tröskelvärde för begärandeutlösare överskrids.
  • false (standardvärde). Konfiguration av begäran utlöser inte profilering.

periodicRecordingDurationSeconds Profilering av inspelningstid i sekunder när en profileringssession startas med knappen Profil nu . Standardvärdet är 120.

Vanliga frågor och svar

Vad är Azure Monitor Application Insights Java-profilering?

Java Profiler använder Java Flight Recorder (JFR) för att profilera ditt program med hjälp av en anpassad konfiguration.

Vad är Java Flight Recorder?

Java Flight Recorder (JFR) är ett verktyg för att samla in profileringsdata för ett Java-program som körs. JFR är integrerat i JVM (Java Virtual Machine) och används för felsökning av prestandaproblem. Läs mer om Java SE JFR Runtime.

Vad påverkar priset och/eller licensavgifterna för att aktivera App Insights Java-profilering?

Java-profilering är en kostnadsfri funktion med Application Insights. Prissättningen för Azure Monitor Application Insights baseras på inmatningskostnaden.

Vilken Java-profileringsinformation samlas in?

Profileringsdata som samlas in av JFR omfattar: metod- och körningsprofileringsdata, skräpinsamlingsdata och låsprofiler.

Hur kan jag använda App Insights Java-profilering och visualisera data?

JFR-inspelning kan visas och analyseras med önskat verktyg, till exempel Java Mission Control (JMC).

Tillhandahålls prestandadiagnostik och korrigeringsrekommendationer med App Insights Java-profilering?

"Prestandadiagnostik och rekommendationer" är en ny funktion som är tillgänglig när Application Insights Java Diagnostics. Du kan registrera dig för att förhandsgranska den här funktionen. JFR-inspelning kan visas med Java Mission Control (JMC).

Vad är skillnaden mellan på begäran och automatisk Java-profilering i App Insights?

På begäran utlöses profilering av användare i realtid medan automatisk profilering är med förkonfigurerade utlösare.

Använd Profil nu för profileringsalternativet på begäran. Profil nu profilerar omedelbart alla agenter som är kopplade till Application Insights-instansen.

Automatisk profilering utlöses genom att ett resurströskelvärde nås.

Vilka Java-profileringsutlösare kan jag konfigurera?

Application Insights Java Agent stöder för närvarande övervakning av PROCESSOR- och minnesförbrukning. Cpu-tröskelvärdet konfigureras som en procentandel av alla tillgängliga kärnor på datorn. Minne är den aktuella tidsens minnesregionen (OldGen) mot den maximala möjliga storleken för regionen.

Vilka är de krav som krävs för att aktivera Java-profilering?

Läs förhandskraven överst i den här artikeln.

Kan jag använda Java-profilering för mikrotjänstprogram?

Ja, du kan profilera en JVM som kör mikrotjänster med hjälp av JFR.