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 |
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 |
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.