Monitoraggio di una macchina virtuale Java ( JVM )

È possibile monitorare in modo completo la macchina virtuale Java ( JVM ) con Instana per identificare i colli di bottiglia e ottimizzare le prestazioni. Per monitorare JVM, installare l'agente host Instana. Dopo aver installato l'agente, il sensore Instana Java si attiva automaticamente, raccogliendo metriche in tempo reale e tracciando dati che è possibile visualizzare nell'interfaccia utente Instana.

Il sensore Java fornisce strumentazione automatizzata del codice per le tecnologie supportate, monitoraggio dello stato di integrità senza configurazione delle istanze di JVM e tracciamento end-to-end delle richieste su tutti i sistemi.

Informazioni supportate

Il sensore Java supporta le seguenti lingue, sistemi operativi e runtime:

Lingue supportate

Il sensore supporta le seguenti lingue:

  • Clojure
  • Java
  • Kotlin
  • Scala

Sistemi operativi supportati

Il sensore Java supporta i sistemi operativi compatibili con i requisiti degli agenti host, che possono essere verificati nella sezione Sistemi operativi supportati di ciascun agente host, ad esempio Sistemi operativi supportati per Unix.

Requisiti di sistema

Prima di installare l'agente Instana, assicurarsi che siano soddisfatti i requisiti di sistema necessari. Per ulteriori informazioni, consultare Requisiti di sistema.

Installazione dell'agent Instana

Per monitorare JVM, è necessario installare l'agente host Instana. Per ulteriori informazioni, vedere Installazione degli agenti host. L'agente distribuisce, configura e installa automaticamente il sensore Java. Per garantire che le applicazioni Java siano strumentate, assicurarsi che la distribuzione JVM sia supportata.

Nota: non tentare di utilizzare contemporaneamente agenti di più fornitori. Potresti riscontrare risultati imprevedibili che potrebbero causare il malfunzionamento dell'applicazione. Per ulteriori informazioni, consultare Agenti incompatibili.

Esclusione delle JVM dal monitoraggio

Per evitare l'associazione dell'agente Instana a un JVM, è possibile impostare la variabile INSTANA_IGNORE di ambiente su true nell'ambiente JVM.

Opzionale: Configurazione del sensore

Dopo aver installato l'agente Instana, il sensore Java viene installato e configurato automaticamente. Sebbene non sia necessaria alcuna configurazione per le metriche predefinite e il tracciamento distribuito, è possibile configurare i singoli componenti del sensore.

Per ulteriori informazioni sulla configurazione del sensore, vedere Configurazione di un sensore Java.

Dopo aver configurato il sensore Java, questo inizia automaticamente a raccogliere le metriche dall' JVM. È possibile visualizzare queste metriche nell'interfaccia utente di Instana. Il sensore Java supporta anche altre funzionalità di Instana come il tracciamento automatico, il tracciamento personalizzato e la profilazione automatica.

Dati di configurazione

La tabella seguente elenca i dati di configurazione raccolti dall'istanza di JVM :

Configurazione Descrizione
Versione Java La versione dell' Java.
Runtime Java L'ambiente di runtime Java (JRE) di Java.
Heap massimo Dimensione massima dell'heap disponibile per l' JVM e.
Percorso classi Il parametro del percorso di classe impostato nell' JVM e.

Metriche di prestazioni

La tabella seguente elenca i dati relativi alle metriche delle prestazioni raccolti dall'istanza di JVM :

Metriche di prestazioni Descrizione Punto di dati
Memoria utilizzata Memoria totale utilizzata dall' JVM e. Viene visualizzato il valore KPI misurato attualmente. Il conteggio dei byte viene raccolto da java.lang.Runtime#totalMemory.
Thread Numero di thread che si trovano in stati diversi: new, runnable, timed-waiting, waiting, o blocked. I valori vengono visualizzati su un grafico relativo al periodo di tempo selezionato. - Gli ID dei thread correnti vengono raccolti da java.lang.management.ThreadMXBean#getAllThreadIds. - Gli stati dei thread vengono raccolti da ThreadMXBean#getThreadInfo.
Memoria heap Dimensione massima dell'heap disponibile per l' JVM e. - Il conteggio dei byte viene calcolato come java.lang.Runtime#totalMemory - java.lang.Runtime#freeMemory. - La dimensione massima dell'heap visualizzata nel grafico viene determinata analizzando il -Xmx parametro della riga di comando oppure viene raccolta da java.lang.Runtime#maxMemory. - La percentuale di memoria heap utilizzata rispetto alla memoria heap totale.
Pool di memoria L'utilizzo della memoria dei pool heap e non heap viene visualizzato su un grafico relativo a un periodo di tempo selezionato. - Le informazioni sul pool vengono raccolte da ManagementFactory#getMemoryPoolMXBeans. - I valori del grafico vengono raccolti da ciascun pool java.lang.management.MemoryUsage. - Il valore massimo viene raccolto da getMax, il valore iniziale da getInite il valore corrente da getUsage.
Raccolta dati inutilizzati I valori di attivazione e runtime della raccolta dei rifiuti vengono visualizzati su un grafico relativo a un periodo di tempo selezionato. - Le informazioni sulla raccolta dei rifiuti vengono raccolte da ManagementFactory#getGarbageCollectorMXBeans. - I valori del grafico vengono raccolti da ciascuno dei raccoglitori java.lang.management.GarbageCollectorMXBean. - Il tempo di esecuzione della raccolta dei rifiuti viene raccolto da getCollectionTime, che, secondo Javadoc, è il tempo approssimativo trascorso in millisecondi per la raccolta dei rifiuti accumulati. - Il conteggio delle invocazioni viene raccolto da getCollectionCount. - Entrambi i valori getCollectionTime getCollectionCount e sono il differenziale calcolato durante 1 secondo.
Sospensione Ritardo nell'esecuzione dell'applicazione visualizzato su un grafico relativo a un periodo di tempo selezionato. Calcolato in base al thread di misurazione dell' Instana e nell'app.

Metriche derivate

La tabella seguente elenca le metriche disponibili derivate dalle metriche delle prestazioni, calcolate da un'istanza di JVM :

Metriche di prestazioni Descrizione Nome metrica
Memoria dopo GC La quantità di memoria utilizzata da un'applicazione dopo un evento di Garbage Collection (GC). Questo valore è determinato dalle statistiche sull'utilizzo della memoria e dagli eventi di garbage collection. Quando il sensore " JVM " (Memoria dopo la raccolta dei rifiuti) segnala un'invocazione globale della raccolta dei rifiuti, il valore della memoria in quel momento viene utilizzato per segnalare il valore "Memory After GC" (Memoria dopo la raccolta dei rifiuti). memory.gc.after
Memoria prima del GC La quantità di memoria utilizzata da un'applicazione prima che si verifichi un evento di Garbage Collection (GC). Questo valore è determinato dalle statistiche sull'utilizzo della memoria e dagli eventi di garbage collection. Quando il sensore " JVM " (Memoria prima della raccolta dei rifiuti) segnala un'invocazione globale della raccolta dei rifiuti, il valore della memoria precedente a tale invocazione viene utilizzato per segnalare il valore "Memory Before GC" (Memoria prima della raccolta dei rifiuti). memory.gc.after
Memoria dopo GC Percentuale Una metrica che rappresenta la percentuale di memoria totale disponibile utilizzata da un'applicazione dopo un evento di Garbage Collection (GC). Per ricavare questo valore vengono utilizzate le statistiche sulle prestazioni della memoria utilizzata, la memoria massima utilizzata e le statistiche sulla raccolta dei rifiuti. La percentuale di memoria dopo GC è la percentuale di memoria in uso dopo una raccolta globale dei rifiuti, rispetto alla memoria massima utilizzata dall' JVM. memory.gc.afterPercentage
Memoria prima della GC Percentuale Una metrica che rappresenta la percentuale di memoria totale disponibile utilizzata da un'applicazione prima di un evento di Garbage Collection (GC). Per ricavare questo valore vengono utilizzate le statistiche sulle prestazioni della memoria utilizzata, la memoria massima utilizzata e le statistiche sulla raccolta dei rifiuti. La percentuale di memoria prima della GC è la percentuale di memoria in uso prima di una raccolta globale dei rifiuti, rispetto alla memoria massima utilizzata dall' JVM. memory.gc.beforePercentage

Firme sanitarie

Ogni sensore dispone di una base di conoscenze curata di indicatori di integrità che vengono valutati continuamente rispetto alle metriche in entrata. Queste firme di integrità vengono utilizzate per segnalare problemi o incidenti che dipendono dall'impatto sull'utente.

Gli eventi integrati attivano problemi o incidenti in base a firme di integrità non riuscite sulle entità, mentre gli eventi personalizzati attivano problemi o incidenti in base alle soglie di una singola metrica di qualsiasi entità.

Per ulteriori informazioni sugli eventi integrati per il sensore Java, consultare il riferimento agli eventi integrati.

Metriche personalizzate

Instana supporta alcune librerie di metriche comuni di Java. Se utilizzi le seguenti librerie, puoi strumentare manualmente il codice della tua applicazione per raccogliere metriche personalizzate:

Per ulteriori informazioni, vedere Tracciamento personalizzato.

Utilizzo delle metriche di Dropwizard per il monitoraggio personalizzato di JVM

Se l' JVM e carica la libreria delle metriche Dropwizard, le metriche personalizzate vengono raccolte e visualizzate sulla dashboard JVM. Per evitare il sovraccarico del backend, è previsto un limite predefinito di 200 metriche.

Per disabilitare o modificare il limite delle metriche raccolte, utilizzare la seguente configurazione:

com.instana.plugin.java:
  dropwizardMetricCollection:
    enabled: false
    limit: 200

Se si utilizzano le metriche di Dropwizard come parte del framework Dropwizard, consultare Monitoraggio di Dropwizard.

Altre metriche

Oltre alle metriche relative alla configurazione, alle prestazioni e alle personalizzazioni, il sensore Java raccoglie anche altre metriche, come il thread dump e l'heap dump in tempo reale.

Dump thread live

Per visualizzare un thread dump in tempo reale per l' JVM, fare clic su Ottieni thread dump.

Dump heap

Per creare un dump dell'heap per l' JVM, fare clic su Ottieni dump dell'heap. Per memorizzare il dump dell'heap, indicare una posizione locale all' JVM e.

Tracciamento delle applicazioni Java

Il sensore Java in Instana utilizza i seguenti metodi per tracciare le applicazioni Java :

  • Instana AutoTrace : tracciamento automatico delle applicazioni dell' Java senza necessità di configurazioni manuali o modifiche al codice.
  • Tracciamento personalizzato : strumentazione manuale di parti specifiche del codice dell'applicazione Java per acquisire metriche personalizzate e ottenere informazioni più approfondite.
  • Instana AutoProfile : la profilatura automatica delle applicazioni di Java fornisce informazioni dettagliate sulle prestazioni, l'utilizzo della CPU, l'allocazione della memoria e altre risorse di sistema.

Instana AutoTrace

Per impostazione predefinita, il sensore Java monitora tutte le richieste e crea automaticamente una traccia distribuita per ciascuna di esse. Questa traccia distribuita include il tracciamento cross-host e cross-language. Per ulteriori informazioni, consultare Instana AutoTrace™.

È possibile visualizzare queste tracce nell'interfaccia utente di Instana. Per ulteriori informazioni, vedere Analisi delle tracce e delle chiamate.

Registrazione

È possibile visualizzare solo i log di livello WARN e successivi.

Quando si utilizza Log4j, Log4j2 o Logback per consentire una correlazione più precisa tra la registrazione e il tracciamento, Instana popola automaticamente il contesto diagnostico mappato (MDC) con l'ID di tracciamento. Il nome della variabile MDC è instana.trace.id. Per ulteriori informazioni sull'utilizzo dei framework di registrazione nelle stringhe di formato, consultare la documentazione relativa al proprio framework di registrazione.

Tracciamento personalizzato

Il sensore Java offre uno strumento di tracciamento completamente automatizzato e pronto all'uso. In alcuni casi, però, potresti preferire inviare tracce personalizzate alla tua dashboard di Instana. È possibile utilizzare i seguenti metodi per implementare il tracciamento personalizzato:

Java SDK Trace

Se desideri strumentare un framework non ancora supportato da Instana o monitorare le richieste di un'applicazione personalizzata, utilizza l 'SDK Trace di Java e consulta il repository GitHub.

Prima di implementare il tracciamento personalizzato utilizzando l'SDK, consulta le best practice relative al tracciamento.

SDK di tracciamento basato sulla configurazione di Java

Potrebbero verificarsi situazioni in cui l'utilizzo dell'SDK Trace di Java, che richiede la manipolazione del codice sorgente o il contatto con qualcuno in grado di farlo, non è fattibile o auspicabile. In questi casi, utilizzare l 'SDK Trace basato sulla configurazione Java. Sebbene meno ricco di funzionalità rispetto all 'SDK Trace programmatico Java, l'SDK Trace basato su configurazione Java consente una configurazione dichiarativa di span e tag che coprono molti casi d'uso comuni.

Prima di implementare il tracciamento personalizzato utilizzando l 'SDK Trace di Java basato sulla configurazione, consulta le best practice relative al tracciamento.

OpenCensus Instana Esportatore di tracce

Instana fornisce un Trace Exporter per l' OpenCensus per le applicazioni scritte in Java. Utilizzando i processi dell'agente Instana come proxy, Instana inoltra le tracce esportate dalle applicazioni strumentate con Census al proprio backend.

Per ulteriori informazioni, consultare il sito OpenCensus Exporters.

Disabilitare il tracciamento automatico ( Instana AutoTrace™ ) se l'agente viene utilizzato sullo stesso host di Census. Per ulteriori informazioni, consultare [Disabilitazione della strumentazione di tracciamento di Java ](../.. /ecosystem/jvm/configuration.html #disabling-java-trace-instrumentation.

Instana AutoProfile

I profili sono essenziali per individuare i punti critici delle prestazioni e i colli di bottiglia a livello di codice. Sono fondamentali per ridurre il consumo di risorse e migliorare le prestazioni.

Instana AutoProfile™ genera e riporta i profili di processo a Instana. A differenza dei profiler in fase di sviluppo e su richiesta, che richiedono l'avvio manuale della profilatura, AutoProfile™ pianifica automaticamente ed esegue in modo continuo la profilatura appropriata per gli ambienti di produzione critici.

Per ulteriori informazioni, consultare Instana AutoProfile™.

Escludendo le JVM

È possibile impostare la variabile INSTANA_IGNORE di ambiente su true nell'ambiente JVM per evitare l'allegato di Instana Agent a JVM.