Condividi tramite


Java Profiler per Application Insights di Monitoraggio di Azure

Nota

La funzionalità Java Profiler è disponibile in anteprima, a partire dalla versione 3.4.0.

Application Insights Java Profiler offre un sistema per:

  • Generazione di profili JDK Flight Recorder (JFR) su richiesta dalla JVM (Java Virtual Machine).
  • Generazione automatica di profili JFR quando vengono soddisfatte determinate condizioni di trigger da JVM, ad esempio CPU o memoria che viola una soglia configurata.

Panoramica

Il profiler Java di Application Insights usa il profiler JFR fornito dalla JVM per registrare i dati di profilatura, consentendo agli utenti di scaricare le registrazioni JFR in un secondo momento e analizzarle per identificare la causa dei problemi di prestazioni.

Questi dati vengono raccolti su richiesta quando vengono soddisfatte le condizioni di trigger. I trigger disponibili sono soglie rispetto all'utilizzo della CPU, all'utilizzo della memoria e alla richiesta (trigger del contratto di servizio). I trigger di richiesta monitorano gli intervalli generati da OpenTelemetry e consentono all'utente di configurare i requisiti del contratto di servizio per la durata di tali intervalli.

Quando viene raggiunta una soglia, viene raccolto e caricato un profilo del tipo e della durata configurati. Questo profilo è quindi visibile all'interno del riquadro delle prestazioni dell'interfaccia utente del portale di Application Insights associata.

Avviso

Per impostazione predefinita, il profiler JFR esegue il profilo "profile-without-env-data". Un file JFR è una serie di eventi generati dalla JVM. La configurazione "profile-without-env-data", è simile alla configurazione "profilo" fornita con la JVM, ma ha avuto alcuni eventi disabilitati che hanno il potenziale per contenere informazioni sulla distribuzione sensibili, ad esempio variabili di ambiente, argomenti forniti alla JVM e processi in esecuzione nel sistema.

I flag che non sono più disponibili sono:

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

Tuttavia, è consigliabile esaminare tutti i flag abilitati per assicurarsi che i profili non contengano dati sensibili.

Vedere Configurazione del contenuto del profilo sull'impostazione di una configurazione del profiler personalizzata.

Prerequisiti

  • JVM con funzionalità JFR (Java Flight Recorder)
    • Java 8 update 262+
    • Java 11+

Avviso

OpenJ9 JVM non è supportato

Utilizzo

Trigger

Per una descrizione più dettagliata dei vari trigger disponibili, vedere panoramica del profiler.

L'agente Java di ApplicationInsights monitora CPU, memoria e durata della richiesta, ad esempio una transazione aziendale. Se viola una soglia configurata, viene attivato un profilo.

Profila ora

Un pulsante Profilo ora si trova nell'interfaccia utente del profiler (vedere le impostazioni del profiler). Se si seleziona questo pulsante, viene richiesto immediatamente un profilo in tutti gli agenti collegati all'istanza di Application Insights. La durata predefinita della profilatura è di due minuti. È possibile modificarlo eseguendo l'override di periodicRecordingDurationSeconds (vedere file di configurazione).

Avviso

La chiamata del profilo a questo punto abiliterà la funzionalità del profiler e Application Insights applicherà i trigger predefiniti del contratto di servizio per CPU e memoria. Quando l'applicazione viola i contratti di servizio, Application Insights raccoglierà i profili Java. Se si vuole disabilitare la profilatura in un secondo momento, è possibile farlo nel menu trigger visualizzato in Installazione.

CPU

La soglia della CPU è una percentuale dell'utilizzo di tutti i core disponibili nel sistema.

Ad esempio, se un core di un computer a otto core fosse saturo, la percentuale di CPU verrebbe considerata del 12,5%.

Memoria

La percentuale di memoria è l'occupazione corrente dell'area di memoria Tenured (OldGen) rispetto alle dimensioni massime possibili dell'area.

L'occupazione viene valutata dopo l'esecuzione di una raccolta tenured. Le dimensioni massime dell'area tenured sono le dimensioni che sarebbe se l'heap JVM (Java Virtual Machine) è cresciuto fino alla dimensione massima.

Ad esempio, eseguire lo scenario seguente:

  • L'heap Java può raggiungere un massimo di 1.024 mb.
  • La generazione tenured potrebbe crescere fino al 90% dell'heap.
  • La dimensione massima possibile di tenured sarebbe 922 mb.
  • La soglia è stata impostata tramite l'interfaccia utente su 75%, pertanto la soglia sarà pari al 75% di 922 mb, 691 mb.

In questo scenario, un profilo si verifica nelle circostanze seguenti:

  • Viene eseguita un'operazione completa di Garbage Collection
  • L'occupazione delle aree tenured è superiore a 691 mb dopo la raccolta

Richiedi

I trigger del contratto di servizio sono basati su OpenTelemetry e avviano un profilo se vengono soddisfatti determinati criteri.

Ogni singola configurazione del trigger viene formata nel modo seguente:

  • Name - Identificatore univoco per il trigger.
  • Filter - Filtra le richieste di interesse per il trigger.
  • Aggregation - Calcola il rapporto delle richieste che hanno violato una determinata soglia.
    • Threshold - Valore minimo (in millisecondi) in cui si verifica una violazione della richiesta.
    • Minimum samples - Il numero minimo di campioni che devono essere raccolti per la produzione di dati da parte dell'aggregazione, questa impostazione consiste nell’impedire l'attivazione di piccole dimensioni di campioni.
    • Window - Intervallo di tempo in sequenza (in millisecondi).
  • Threshold - Valore soglia (percentuale) applicato all'output dell'aggregazione. Se questo valore viene superato, viene avviato un profilo.

Ad esempio, lo scenario seguente attiva un profilo se: più del 75% delle richieste a un endpoint specifico (/users/.*) richiede più di 30 ms all'interno di una finestra di 60 secondi, quando sono stati raccolti almeno 100 campioni.

Screenshot dell'esempio di trigger di richiesta

Installazione

La procedura seguente illustra come abilitare il componente di profilatura nell'agente e configurare i limiti delle risorse che attivano un profilo in caso di violazione.

  1. Configurare le soglie delle risorse che causano la raccolta di un profilo:

    1. Passare alla sezione Prestazioni -> Profiler dell'istanza di Application Insights. Screenshot del collegamento per aprire il riquadro delle prestazioni.Screenshot del pulsante Profiler nel riquadro Prestazioni.

    2. Selezionare “Trigger”

    3. Configurare i trigger di CPU, memoria o richiesta necessari (se abilitati) e selezionare Applica. Screenshot delle impostazioni del trigger

Avviso

Il profiler Java non supporta il trigger "Campionamento". La configurazione non avrà alcun effetto.

Al termine di questi passaggi, l'agente monitorerà l'utilizzo delle risorse del processo e attiverà un profilo quando viene superata la soglia. Quando un profilo viene attivato e completato, è visualizzabile dall'istanza di Application Insights all'interno della sezione Performance -> Profiler. Da tale schermata è possibile scaricare il profilo, una volta scaricato il file di registrazione JFR, è possibile aprire e analizzare all'interno di uno strumento scelto, ad esempio Oracle JDK Mission Control (JMC).

Screenshot delle funzionalità e delle impostazioni della pagina del profiler.

Impostazione

La configurazione delle impostazioni di attivazione del profiler, ad esempio soglie e periodi di profilatura, viene impostata all'interno dell'interfaccia utente di ApplicationInsights nell'interfaccia utente Prestazioni, Profiler, Trigger dell'interfaccia utente, come descritto in Installazione.

Inoltre, è possibile configurare molti parametri usando le variabili di ambiente e il file di configurazione applicationinsights.json.

Configurazione del contenuto del profilo

Se si vuole fornire una configurazione del profilo personalizzata, modificare memoryTriggeredSettings, e cpuTriggeredSettings per specificare il percorso a un file .jfc con la configurazione richiesta.

I profili possono essere generati/modificati nell'interfaccia utente JDK Mission Control (JMC) nel menu Window->Flight Recording Template Manager e il controllo sui singoli flag si trova all'interno di Edit->Advanced di questa interfaccia utente.

Variabili di ambiente

  • APPLICATIONINSIGHTS_PREVIEW_PROFILER_ENABLED: booleano (impostazione predefinita: true) Abilita/disabilita la funzionalità di profilatura. Per impostazione predefinita, la funzionalità è abilitata all'interno dell'agente (dall'agente 3.4.9). Tuttavia, anche se questa funzionalità è abilitata all'interno dell'agente, i profili non vengono raccolti a meno che non siano abilitati all'interno del portale, come descritto in Installazione.

File di configurazione

Configurazione di esempio:

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

memoryTriggeredSettings Questa configurazione viene usata se è richiesto un profilo di memoria. Questo valore può essere uno dei seguenti:

  • profile-without-env-data (valore predefinito). Un profilo con determinati eventi sensibili disabilitati, vedere la sezione Avviso per informazioni dettagliate.
  • profile. Usa la configurazione profile.jfc fornita con JFR.
  • Percorso di un file di configurazione jfc personalizzato nel file system, /tmp/myconfig.jfcad esempio .

cpuTriggeredSettings Questa configurazione viene usata se viene richiesto un profilo cpu. Questo valore può essere uno dei seguenti:

  • profile-without-env-data (valore predefinito). Un profilo con determinati eventi sensibili disabilitati, vedere la sezione Avviso per informazioni dettagliate.
  • profile. Usa la configurazione jfc profile.jfc fornita con JFR.
  • Percorso di un file di configurazione jfc personalizzato nel file system, /tmp/myconfig.jfcad esempio .

manualTriggeredSettings Questa configurazione viene usata se è richiesto un profilo manuale. Questo valore può essere uno dei seguenti:

  • profile-without-env-data (valore predefinito). Un profilo con determinati eventi sensibili disabilitati, vedere la sezione Avviso per informazioni dettagliate.
  • profile. Usa la configurazione jfc profile.jfc fornita con JFR.
  • Percorso di un file di configurazione jfc personalizzato nel file system, /tmp/myconfig.jfcad esempio .

enableRequestTriggering Indica se la profilatura JFR deve essere attivata in base alla configurazione della richiesta. Questo valore può essere uno dei seguenti:

  • true La profilatura viene attivata se viene violata una soglia di trigger di richiesta.
  • false (valore predefinito). La configurazione della richiesta non attiva la profilatura.

periodicRecordingDurationSeconds Durata della registrazione della profilatura in secondi quando viene avviata una sessione di profilatura usando il pulsante Profila ora. Il valore predefinito è 120.

Domande frequenti

Che cos'è La profilatura Java di Application Insights per Monitoraggio di Azure?

Il profiler Java di Monitoraggio di Azure usa Java Flight Recorder (JFR) per profilare l'applicazione usando una configurazione personalizzata.

Che cos'è Java Flight Recorder?

Java Flight Recorder (JFR) è uno strumento per la raccolta di dati di profilatura di un'applicazione Java in esecuzione. JFR è integrato nella macchina virtuale Java (JVM) e viene usato per la risoluzione dei problemi di prestazioni. Altre informazioni su Java SE JFR Runtime.

Quali sono le implicazioni relative al prezzo e/o alla tariffa di licenza per l'abilitazione della profilatura Java di App Insights?

La profilatura Java è una funzionalità gratuita con Application Insights. I prezzi di Application Insights per Monitoraggio di Azure si basano sui costi di inserimento.

Quali informazioni di profilatura Java vengono raccolte?

I dati di profilatura raccolti da JFR includono: dati di profilatura del metodo ed esecuzione, dati di Garbage Collection e profili di blocco.

Come è possibile usare la profilatura Java di App Insights e visualizzare i dati?

La registrazione JFR può essere visualizzata e analizzata con lo strumento preferito, ad esempio Java Mission Control (JMC).

La diagnosi delle prestazioni e le raccomandazioni relative alle correzioni vengono fornite con la profilatura Java di App Insights?

"Diagnostica delle prestazioni e raccomandazioni" è una nuova funzionalità disponibile non appena Diagnostica Java di Application Insights. È possibile iscriversi per visualizzare in anteprima questa funzionalità. La registrazione JFR può essere visualizzata con Java Mission Control (JMC).

Qual è la differenza tra profilatura Java su richiesta e automatica in App Insights?

Su richiesta è la profilatura attivata dall'utente in tempo reale, mentre la profilatura automatica è con trigger preconfigurati.

Usare Profila ora per l'opzione di profilatura su richiesta. Profila ora profila immediatamente tutti gli agenti collegati all'istanza di Application Insights.

La profilatura automatizzata viene attivata in una soglia di risorse.

Quali trigger di profilatura Java è possibile configurare?

Application Insights Java Agent supporta attualmente il monitoraggio dell'utilizzo di CPU e memoria. La soglia della CPU viene configurata come percentuale di tutti i core disponibili nel computer. La memoria è l'occupazione corrente dell'area di memoria tenured (OldGen) rispetto alle dimensioni massime possibili dell'area.

Quali sono i prerequisiti necessari per abilitare la profilatura Java?

Esaminare i prerequisiti nella parte superiore di questo articolo.

È possibile usare la profilatura Java per l'applicazione di microservizi?

Sì, è possibile profilare una JVM che esegue microservizi usando JFR.