Configura snapshot thread in Tracer APM

La funzione Snapshot thread consente la raccolta di snapshot dello stack di thread che possono essere utilizzati per l'analisi approfondita.

Gli snapshot thread consentono la raccolta di trace quali gli snapshot dello stack di thread, il sovraccarico di memoria dei thread, il sovraccarico della CPU di thread e l'impatto di gc sul trace. Raccoglie gli snapshot dello stack di thread e i dati correlati allo stack, ad esempio stato e lock, a un intervallo specifico.

Gli utenti possono abilitare la raccolta di snapshot dello stack di thread per l'acquisizione del dump dello stack degli intervalli. Offre visibilità sullo stack di codice dell'utente.

L'intervallo di tempo predefinito per la raccolta delle istantanee thread è 250 ms.

La versione di APM Tracer 1.4 o successiva supporta gli snapshot thread ed è disabilitata per impostazione predefinita.

Tracer APM e agente APM supportano gli snapshot thread. Per informazioni dettagliate sulla configurazione degli snapshot di thread nell'agente APM, vedere Configura snapshot di thread nell'agente APM.

Abilita snapshot thread in Tracer APM

Snapshot thread integrato con ApmTracer. Verrà inizializzato come parte della creazione dell'oggetto ApmTracer.

Se si utilizza Helidon, passare a Snapshot thread in Helidon.

L'esempio riportato di seguito mostra molti metodi di configurazione, incluso quello per le istantanee di thread: withCollectDeepDiveTraceSnapshot con valore (true). Gli snapshot thread verranno richiamati dalla funzione di build di ApmTracer:


ApmTracer tracer = (ApmTracer) new ApmTracer.Builder(AGENT_TRACER_NAME,serviceName)
                      .withProperty(PROP_NAME_HYBRID_TRACER_STARTER, PROP_VALUE_HYBRID_TRACER_STARTER)                      
                      .withMicrosecondAccurateTimestamp(microsecondAccurate)                      
                      .withObject(agentCommon)                       
                      .withTraceListener(traceListener)                      
                      .withCollectThreadId(collectThreadId)                      
                      .withCollectThreadName(collectThreadName)                      
                      .withCollectDeepDiveTraceSnapshot(true)
                      .build();

Per informazioni su come creare un'istanza di APM Tracer, vedere Istanzia APM Tracer.

Metodi di configurazione snapshot thread

Sono disponibili i metodi di configurazione riportati di seguito.

Metodo descrizione; Unità Valore predefinito Valori supportati
withMaxPercentTraceExportToCollectorPerMinute Percentuale massima di trace in entrata al minuto per esportarli nel collector. Percentuale 100

minimo:1

Massimo: 100

withMaxTraceExportToCollectorPerMinute Numero massimo di prime tracce al minuto per esportarle nel collector. Numerico 200

minimo:1

Massimo: 1500

withSnapshotCollectionIntervalInMS Intervallo in base al quale verranno raccolti i dati dello snapshot del thread. millisecondi 250

Minima:250

Massimo: 30000

withMaxSnapshotsPerTrace Numero massimo di snapshot consentiti per trace. Numerico 16

Minima: 1

Massima: 16

withMaxStackTraceDepthPerSnapshot Numero massimo di frame di stack trace raccolti per qualsiasi thread. Numerico 256

Minima: 1

Massimo: 256

withLogLevel Stampa i log di approfondimento, uguali o superiori a questo valore di proprietà. Stringa Informazioni

DEBUG, INFO, AVVISA, GRAVE

withMaxProcessCpuUsagePercent Uso massimo della CPU del processo. Si consiglia di mantenere l'uso complessivo della CPU del processo sotto questa soglia. Numerico 90

Minima: 1

Massimo: 90

withDeepDiveCpuUsagePercent Soglia minima per mantenere l'uso complessivo della CPU deepdive. Percentuale 3

Minima: 1

Massimo: 5

  Soglia massima per mantenere l'uso complessivo della CPU deepdive. Percentuale 5

Minima: 5

Massima: 20

withTraceLifeInMS Soglia minima per una traccia. millisecondi 50

Minima: 50

Massimo: 60000

  Soglia massima per una traccia. millisecondi 60000

Minima: 60000

Massimo: 600000

Ad esempio:
DeepDiveConfiguration deepDiveConfiguration = DeepDiveConfigurationBuilder.builder()
                                              .withMaxPercentTraceExportToCollectorPerMinute(100) 
                                              .withMaxTraceExportToCollectorPerMinute(200) 
                                              .withSnapshotCollectionIntervalInMS(250)     
                                              .withMaxSnapshotsPerTrace(16)               
                                              .withMaxStackTraceDepthPerSnapshot(256)                   
                                              .withLogLevel("INFO")                             
                                              .withMaxProcessCpuUsagePercent(90)                              
                                              .withDeepDiveCpuUsagePercent(Range.RangeBuilder.builder()
                                              .withMinThreshold(3).withMaxThreshold(5).build()) 
                                              .withTraceLifeInMS(Range.RangeBuilder.builder()
                                              .withMinThreshold(50).withMaxThreshold(60000).build()) 
                                              .build();

ApmTracer tracer = (ApmTracer) new ApmTracer.Builder(AGENT_TRACER_NAME, serviceName)
                            .withObject(deepDiveConfiguration)
                            .withCollectDeepDiveTraceSnapshot(true)
                            .build();

Snapshot thread in Helidon

Gli snapshot thread sono supportati in Helidon. Verrà inizializzato come parte della creazione dell'oggetto ApmTracer all'interno di Helidon.

Per abilitare gli snapshot dei thread, aggiornare il file YAML di Helidon, aggiungere la proprietà collect-deepdive-trace-snapshots e impostarla su true.

Ad esempio:

tracing:
    name: "Helidon APM Tracer"
    service: "helidonse-http"
    data-upload-endpoint:<endpoint-url>
    private-data-key: <private-data-key>
    collect-metrics:true
    collect-resources: true
    collect-deepdive-trace-snapshots:true

Per informazioni sull'uso di APM Tracer in Helidon, vedere Use APM Tracer in Helidon.

Proprietà di configurazione di Helidon

Per configurare gli snapshot di thread in Helidon, aggiornare il file YAML di Helidon utilizzando le seguenti proprietà:

Nome proprietà descrizione; Unità Valore predefinito Valori supportati
com.oracle.apm.agent.deepdive.maxPercentTraceExportToCollectorPerMinute Percentuale massima di trace in entrata al minuto per esportarli nel collector. Percentuale 100

minimo:1

Massimo: 100

com.oracle.apm.agent.deepdive.maxTraceExportToCollectorPerMinute Numero massimo di prime tracce al minuto per esportarle nel collector. Numerico 200

minimo:1

Massimo: 1500

com.oracle.apm.agent.deepdive.snapshotCollectionIntervalInMS Intervallo in base al quale verranno raccolti i dati dello snapshot del thread. millisecondi 250

Minima:250

Massimo: 30000

com.oracle.apm.agent.deepdive.maxSnapshotsPerTrace Numero massimo di snapshot consentiti per trace. Numerico 16

Minima: 1

Massima: 16

com.oracle.apm.agent.deepdive.maxStackTraceDepthPerSnapshot Numero massimo di frame di stack trace raccolti per qualsiasi thread. Numerico 256

Minima: 1

Massimo: 256

com.oracle.apm.agent.deepdive.logLevel Stampa i log di approfondimento, uguali o superiori a questo valore di proprietà. Stringa Informazioni

DEBUG, INFO, AVVISA, GRAVE

com.oracle.apm.agent.deepdive.maxProcessCpuUsagePercent Uso massimo della CPU del processo. Si consiglia di mantenere l'uso complessivo della CPU del processo sotto questa soglia. Numerico 90

Minima: 1

Massimo: 90

com.oracle.apm.agent.deepdive.deepDiveCpuUsagePercent.minThreshold Soglia minima per mantenere l'uso complessivo della CPU deepdive. Percentuale 3

Minima: 1

Massimo: 5

com.oracle.apm.agent.deepdive.deepDiveCpuUsagePercent.maxThreshold Soglia massima per mantenere l'uso complessivo della CPU deepdive. Percentuale 5

Minima: 5

Massima: 20

com.oracle.apm.agent.deepdive.traceLifeInMS.minThreshold Soglia minima per una traccia. millisecondi 50

Minima: 50

Massimo: 60000

com.oracle.apm.agent.deepdive.traceLifeInMS.maxThreshold Soglia massima per una traccia. millisecondi 60_000

Minima: 60000

Massimo: 600000

Ad esempio:
deepDiveProperties:
 com.oracle.apm.agent.deepdive.maxPercentTraceExportToCollectorPerMinute: 100
 com.oracle.apm.agent.deepdive.maxTraceExportToCollectorPerMinute: 200
 com.oracle.apm.agent.deepdive.snapshotCollectionIntervalInMS: 250
 com.oracle.apm.agent.deepdive.maxSnapshotsPerTrace: 16
 com.oracle.apm.agent.deepdive.maxStackTraceDepthPerSnapshot: 256
 com.oracle.apm.agent.deepdive.logLevel: INFO
 com.oracle.apm.agent.deepdive.maxProcessCpuUsagePercent: 90
 com.oracle.apm.agent.deepdive.deepDiveCpuUsagePercent.minThreshold: 3
 com.oracle.apm.agent.deepdive.deepDiveCpuUsagePercent.maxThreshold: 5
 com.oracle.apm.agent.deepdive.traceLifeInMS.minThreshold: 50
 com.oracle.apm.agent.deepdive.traceLifeInMS.maxThreshold: 60000

Verifica snapshot thread

Per verificare che la funzione Snapshot thread sia stata configurata correttamente e che i dati siano stati caricati in Application Performance Monitoring, utilizzare l'opzione Vista snapshot in Visualizza dettagli trace o intervallo.