Configurar Snapshots de Thread no Rastreador do APM

O recurso de snapshots de thread permite a coleta de snapshots de pilha de thread que podem ser usados para análise de mergulho profundo.

Os snapshots de thread permitem a coleta de rastreamentos como snapshots de pilha de threads, overhead de memória de thread, overhead de cpu de thread e impacto gc no rastreamento. Ele coleta os snapshots da pilha de threads e os dados relacionados à pilha, como estado e bloqueios, em um intervalo específico.

Os usuários podem ativar a coleta de snapshots de pilha de thread para obtenção de dump de pilha de intervalos. Ele oferece visibilidade da pilha de códigos de usuário.

O intervalo de tempo padrão da coleta de snapshots de thread é de 250 ms.

A versão ou superior do APM Tracer 1.4 suporta snapshots de threads e está desativada por padrão.

Rastreador de APM e Agente de APM suportam snapshots de thread. Para obter detalhes sobre como configurar snapshots de thread no APM Agent, consulte Configurar Snapshots de Thread no APM Agent.

Ativar Snapshots de Thread no Rastreador do APM

O Snapshot de Thread está integrado ao ApmTracer. Ele será inicializado como parte da criação do objeto ApmTracer.

Se você estiver usando o Helidon, passe para Snapshots de Thread no Helidon.

O exemplo a seguir mostra muitos métodos de configuração, incluindo um para o recurso de snapshots de thread: withCollectDeepDiveTraceSnapshot com o valor (true). Os snapshots de thread serão chamados na função de build 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 obter informações sobre como instanciar o Rastreador do APM, consulte Instanciar Rastreador do APM.

Métodos de Configuração de Instantâneos de Thread

Estão disponíveis os seguintes métodos de configuração:

Método Descrição Unidade Valor Padrão Valores Suporte
withMaxPercentTraceExportToCollectorPerMinute Porcentagem máxima de rastreamentos de entrada por minuto para exportá-los para o cobrador. Porcentagem 100

Mínimo:1

Máximo: 100

withMaxTraceExportToCollectorPerMinute Número máximo de rastreamentos principais por minuto para exportá-los para o cobrador. Número 200

Mínimo:1

Máximo: 1500

withSnapshotCollectionIntervalInMS Intervalo no qual os dados do snapshot do thread serão coletados. Milissegundos 250

Mínimo:250

Máximo: 300000

withMaxSnapshotsPerTrace Número máximo de snapshots permitidos por rastreamento. Número 16

Mínimo: 1

Máximo: 16

withMaxStackTraceDepthPerSnapshot Máximo de quadros de rastreamento de pilha coletados para qualquer thread. Número 256

Mínimo: 1

Máximo: 256

withLogLevel Imprima logs de mergulho profundo, que sejam iguais ou superiores a esse valor de propriedade. String INFO

DEPURAÇÃO, INFORMAÇÕES, AVISAR, GRAVE

withMaxProcessCpuUsagePercent Uso máximo da CPU no processo. É recomendável manter o uso geral de CPU do processo abaixo desse limite. Número 90

Mínimo: 1

Máximo: 90

withDeepDiveCpuUsagePercent Limite mínimo para manter o uso geral profundo da CPU. Porcentagem 3

Mínimo: 1

Máximo: 5

  Limite máximo para manter o uso geral profundo da CPU. Porcentagem 5

Mínimo: 5

Máximo: 20

withTraceLifeInMS Limite mínimo para um rastreamento. Milissegundos 50

Mínimo: 50

Máximo: 60000

  Limite máximo para um rastreamento. Milissegundos 60000

Mínimo: 60000

Máximo: 600000

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

Snapshots de Thread no Helidon

Snapshots de Thread são suportados no Helidon. Ele será inicializado como parte da criação do objeto ApmTracer dentro do Helidon.

Para ativar snapshots de thread, atualize o arquivo YAML do Helidon e adicione a propriedade collect-deepdive-trace-snapshots e defina-a como true.

Por exemplo:

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 obter informações sobre como usar o Rastreador de APM no Helidon, consulte Usar o Rastreador de APM no Helidon.

Propriedades de Configuração do Helidon

Para configurar snapshots de thread no Helidon, atualize o arquivo YAML do Helidon usando as seguintes propriedades:

Nome da Propriedade Descrição Unidade Valor Padrão Valores Suporte
com.oracle.apm.agent.deepdive.maxPercentTraceExportToCollectorPerMinute Porcentagem máxima de rastreamentos de entrada por minuto para exportá-los para o cobrador. Porcentagem 100

Mínimo:1

Máximo: 100

com.oracle.apm.agent.deepdive.maxTraceExportToCollectorPerMinute Número máximo de rastreamentos principais por minuto para exportá-los para o cobrador. Número 200

Mínimo:1

Máximo: 1500

com.oracle.apm.agent.deepdive.snapshotCollectionIntervalInMS Intervalo no qual os dados do snapshot do thread serão coletados. Milissegundos 250

Mínimo:250

Máximo: 300000

com.oracle.apm.agent.deepdive.maxSnapshotsPerTrace Número máximo de snapshots permitidos por rastreamento. Número 16

Mínimo: 1

Máximo: 16

com.oracle.apm.agent.deepdive.maxStackTraceDepthPerSnapshot Máximo de quadros de rastreamento de pilha coletados para qualquer thread. Número 256

Mínimo: 1

Máximo: 256

com.oracle.apm.agent.deepdive.logLevel Imprima logs de mergulho profundo, que sejam iguais ou superiores a esse valor de propriedade. String INFO

DEPURAÇÃO, INFORMAÇÕES, AVISAR, GRAVE

com.oracle.apm.agent.deepdive.maxProcessCpuUsagePercent Uso máximo da CPU no processo. É recomendável manter o uso geral de CPU do processo abaixo desse limite. Número 90

Mínimo: 1

Máximo: 90

com.oracle.apm.agent.deepdive.deepDiveCpuUsagePercent.minThreshold Limite mínimo para manter o uso geral profundo da CPU. Porcentagem 3

Mínimo: 1

Máximo: 5

com.oracle.apm.agent.deepdive.deepDiveCpuUsagePercent.maxThreshold Limite máximo para manter o uso geral profundo da CPU. Porcentagem 5

Mínimo: 5

Máximo: 20

com.oracle.apm.agent.deepdive.traceLifeInMS.minThreshold Limite mínimo para um rastreamento. Milissegundos 50

Mínimo: 50

Máximo: 60000

com.oracle.apm.agent.deepdive.traceLifeInMS.maxThreshold Limite máximo para um rastreamento. Milissegundos 60_000

Mínimo: 60000

Máximo: 600000

Por exemplo:
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 Snapshots de Thread

Para verificar se o recurso de snapshots de thread foi configurado corretamente e se os dados estão sendo submetidos a upload para o Application Performance Monitoring, use a opção View Snapshot em Exibir Detalhes do Rastreamento ou do Intervalo.