Configurar instantáneas de thread en el rastreador de APM

La función de instantáneas de subprocesos permite la recopilación de instantáneas de pila de subprocesos que se puede utilizar para un análisis detallado.

Las instantáneas de subprocesos permiten la recopilación de rastreos como instantáneas de pila de subprocesos, sobrecarga de memoria de subprocesos, sobrecarga de CPU de subprocesos e impacto de control global en el rastreo. Recopila las instantáneas de la pila de subprocesos y los datos relacionados con la pila, como el estado y los bloqueos, en un intervalo específico.

Los usuarios pueden activar la recopilación de instantáneas de pila de subprocesos para realizar volcados de pila de períodos. Proporciona visibilidad de pila de código de usuario.

El intervalo de tiempo por defecto de recopilación de instantáneas de thread es de 250 ms.

El rastreo de APM versión 1.4 o superior admite instantáneas de subprocesos y está desactivado por defecto.

El rastreador de APM y el agente de APM soportan instantáneas de thread. Para obtener detalles sobre la configuración de instantáneas de thread en el agente de APM, consulte Configuración de instantáneas de thread en el agente de APM.

Activar instantáneas de thread en el rastreador de APM

La instantánea de thread está integrada con ApmTracer. Se inicializará como parte de la creación del objeto ApmTracer.

Si está utilizando Helidon, vaya a Thread Snapshots in Helidon.

En el siguiente ejemplo, se muestran muchos métodos de configuración, incluido el de la función de instantáneas de thread: withCollectDeepDiveTraceSnapshot con el valor (true). Las instantáneas de thread se llamarán desde la función de creación de 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();

Para obtener información sobre cómo crear instancias del rastreador de APM, consulte Instantiate APM Tracer.

Métodos de Configuración de Instantáneas de Thread

Están disponibles los siguientes métodos de configuración:

Método Descripción Unidad Valor por defecto Valores soportados
withMaxPercentTraceExportToCollectorPerMinute Porcentaje máximo de rastreos entrantes por minuto para exportarlos al cobrador. Porcentaje 100

Mínimo: 1

Máximo: 100

withMaxTraceExportToCollectorPerMinute Número máximo de rastreos principales por minuto para exportarlos al cobrador. Número 200

Mínimo: 1

Máximo: 1500

withSnapshotCollectionIntervalInMS Intervalo en el que se recopilarán los datos de instantánea de thread. Milisegundos 250

Mínimo: 250

Máximo: 300000

withMaxSnapshotsPerTrace Número máximo de instantáneas permitidas por rastreo. Número 16

Mínimo: 1

Máximo: 16

withMaxStackTraceDepthPerSnapshot Máximo de marcos de rastreo de pila recopilados para cualquier thread. Número 256

Mínimo: 1

Máximo: 256

withLogLevel Imprima logs de buceo profundo, que sean iguales o superiores a este valor de propiedad. Cadena INFO

DEPURACIÓN, INFORMACIÓN, ADVERTENCIA, GRAVE

withMaxProcessCpuUsagePercent Uso máximo de CPU de proceso. Se recomienda mantener el uso general de CPU del proceso por debajo de este umbral. Número 90

Mínimo: 1

Máximo: 90

withDeepDiveCpuUsagePercent Umbral mínimo para mantener el uso general profundo de la CPU. Porcentaje 3

Mínimo: 1

Máximo: 5

  Umbral máximo para mantener el uso general profundo de la CPU. Porcentaje 5

Mínimo: 5

Máximo: 20

withTraceLifeInMS Umbral mínimo para un rastreo. Milisegundos 50

Mínimo: 50

Máximo: 60000

  Umbral máximo para un rastreo. Milisegundos 60000

Mínimo: 60000

Máximo: 600000

Por ejemplo:
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();

Instantáneas de Thread en Helidon

Las instantáneas de subprocesos están soportadas en Helidon. Se inicializará como parte de la creación del objeto ApmTracer dentro de Helidon.

Para activar instantáneas de thread, actualice el archivo YAML de Helidon, agregue la propiedad collect-deepdive-trace-snapshots y defínala en true.

Por ejemplo:

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

Para obtener información sobre el uso del rastreador de APM en Helidon, consulte Uso del rastreador de APM en Helidon.

Propiedades de Configuración para Helidon

Para configurar instantáneas de threads en Helidon, actualice el archivo YAML de Helidon mediante las siguientes propiedades:

Nombre de propiedad Descripción Unidad Valor por defecto Valores soportados
com.oracle.apm.agent.deepdive.maxPercentTraceExportToCollectorPerMinute Porcentaje máximo de rastreos entrantes por minuto para exportarlos al cobrador. Porcentaje 100

Mínimo: 1

Máximo: 100

com.oracle.apm.agent.deepdive.maxTraceExportToCollectorPerMinute Número máximo de rastreos principales por minuto para exportarlos al cobrador. Número 200

Mínimo: 1

Máximo: 1500

com.oracle.apm.agent.deepdive.snapshotCollectionIntervalInMS Intervalo en el que se recopilarán los datos de instantánea de thread. Milisegundos 250

Mínimo: 250

Máximo: 300000

com.oracle.apm.agent.deepdive.maxSnapshotsPerTrace Número máximo de instantáneas permitidas por rastreo. Número 16

Mínimo: 1

Máximo: 16

com.oracle.apm.agent.deepdive.maxStackTraceDepthPerSnapshot Máximo de marcos de rastreo de pila recopilados para cualquier thread. Número 256

Mínimo: 1

Máximo: 256

com.oracle.apm.agent.deepdive.logLevel Imprima logs de buceo profundo, que sean iguales o superiores a este valor de propiedad. Cadena INFO

DEPURACIÓN, INFORMACIÓN, ADVERTENCIA, GRAVE

com.oracle.apm.agent.deepdive.maxProcessCpuUsagePercent Uso máximo de CPU de proceso. Se recomienda mantener el uso general de CPU del proceso por debajo de este umbral. Número 90

Mínimo: 1

Máximo: 90

com.oracle.apm.agent.deepdive.deepDiveCpuUsagePercent.minThreshold Umbral mínimo para mantener el uso general profundo de la CPU. Porcentaje 3

Mínimo: 1

Máximo: 5

com.oracle.apm.agent.deepdive.deepDiveCpuUsagePercent.maxThreshold Umbral máximo para mantener el uso general profundo de la CPU. Porcentaje 5

Mínimo: 5

Máximo: 20

com.oracle.apm.agent.deepdive.traceLifeInMS.minThreshold Umbral mínimo para un rastreo. Milisegundos 50

Mínimo: 50

Máximo: 60000

com.oracle.apm.agent.deepdive.traceLifeInMS.maxThreshold Umbral máximo para un rastreo. Milisegundos 60_000

Mínimo: 60000

Máximo: 600000

Por ejemplo:
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

Verificar instantáneas de thread

Para verificar que la función de instantáneas de thread se ha configurado correctamente y que los datos se están cargando en Application Performance Monitoring, utilice la opción Vista de instantánea de Ver detalles de rastreo o período.