O profiling de threads fornece estatísticas no nível de thread sobre tempo de CPU e contagem de threads por tipo. Esse recurso registra e agrega a pilha de métodos das threads a cada 5 minutos para reconstruir a execução real do código e ajudar a identificar rapidamente problemas relacionados a threads. Se você notar alta utilização de CPU no cluster ou um grande número de métodos lentos, use o profiling de threads para encontrar as threads ou os métodos que mais consomem CPU.
Este recurso está disponível atualmente apenas para aplicações Java.
Pré-requisitos
O monitoramento de aplicações do ARMS oferece uma nova página de detalhes de monitoramento para usuários no novo plano de faturamento. Para obter mais informações sobre o novo plano de faturamento, consulte Billing (New).
Caso ainda não tenha ativado o novo plano de faturamento, clique em Switch to New Version na página Application List.
Sua aplicação deve ter um agente instalado. Para mais informações, consulte Application Monitoring Integration Overview.
Procedimento
Faça login no console do ARMS. No painel de navegação à esquerda, escolha .
-
Na página Application List, selecione a região desejada na parte superior e clique em nome da sua aplicação.
NotaOs ícones na coluna Language têm os seguintes significados:
: Uma aplicação Java integrada ao monitoramento de aplicações.
: Uma aplicação Go integrada ao monitoramento de aplicações.
: Uma aplicação Python integrada ao monitoramento de aplicações.-: Uma aplicação integrada ao Managed Service for OpenTelemetry.
Na barra de navegação superior, escolha .
Analisar threads
A lista à esquerda da página Thread Profiling exibe todas as threads da aplicação e permite localizar rapidamente threads anômalas pelo CPU time. Após selecionar uma thread anômala, use os gráficos à direita para analisar o CPU time e o Number of Threads. Verifique, por exemplo, se a contagem total de threads por minuto é excessiva.
Para qualquer thread anômala, clique em Method Stack para visualizar a pilha de métodos em tempo de execução durante um período específico. É possível, por exemplo, visualizar os métodos correspondentes a threads no estado BLOCKED. Isso ajuda a identificar segmentos de código específicos para otimização e redução da utilização da CPU.
ALL: 365194 RUNNABLE: 986 BLOCKED: 87 WAITING: 1498 TIMED_WAITING: 362617
【BLOCKED】81/87 (times) - Percentage: 93.10%
at java.lang.Object.wait (Native Method)
at xxx.awaitAvailable (BasicResourcePool.java:1315)
at xxx.prelimCheckoutResource (BasicResourcePool.java:557)
at xxx.checkoutResource (BasicResourcePool.java:477)
at xxx.checkoutPooledConnection (C3P0PooledConnectionPool.java:525)
at xxx.getConnection (AbstractPoolBackedDataSource.java:128)
at xxx.getConnection (PoolingConnectionProvider.java:247)
at xxx.getConnection (DBConnectionManager.java:108)
at xxx.getConnection (JobStoreSupport.java:775)
at com.alibaba.arms.alert.scheduler.xxx.EnhanceJobStoreSupport.getNonManagedTXConnection (EnhanceJobStoreSupport.java:17)
at xxx.executeInNonManagedTXLock (JobStoreSupport.java:3777)
at xxx.retryExecuteInNonManagedTXLock (JobStoreSupport.java:3742)
at xxx.triggeredJobComplete (JobStoreSupport.java:3039)
at xxx.notifyJobStoreJobComplete (QuartzScheduler.java:1804)
at xxx.JobRunShell.java:269)
at xxx$WorkerThread.run (SimpleThreadPool.java:573)
【BLOCKED】2/87 (times) - Percentage: 2.30%
at xxx.checkinStatement (GooGooStatementCache.java:220)
at xxx.checkinStatement (NewPooledConnection.java:239)
at xxx.close (NewProxyPreparedStatement.java:1807)
at xxx.closeStatement (StdJDBCDelegate.java:3287)
at xxx.deleteFiredTrigger (StdJDBCDelegate.java:2916)
at xxx.triggeredJobComplete (JobStoreSupport.java:3116)
at xxx.executeVoid (JobStoreSupport.java:3043)
at xxx.$VoidTransactionCallback.execute (JobStoreSupport.java:3703)
at xxx.$VoidTransactionCallback.execute (JobStoreSupport.java:3701)
at xxx.executeInNonManagedTXLock (JobStoreSupport.java:3787)
at xxx.retryExecuteInNonManagedTXLock (JobStoreSupport.java:3742)
at xxx.triggeredJobComplete (JobStoreSupport.java:3039)
at xxx.notifyJobStoreJobComplete (QuartzScheduler.java:1804)
at xxx.JobRunShell.java:269)
at xxx.WorkerThread.run (SimpleThreadPool.java:573)
【BLOCKED】1/87 (times) - Percentage: 1.15%
Se a versão do seu agente for 2.7.3.5 ou posterior, o ARMS utiliza continuous profiling para fornecer informações mais precisas sobre a pilha de métodos no uso de CPU das threads. A figura a seguir mostra um exemplo. Para mais informações, consulte continuous profiling.

Se nenhum dado aparecer após clicar em Method Stack, siga estas etapas para solucionar o problema:
Caso a versão do seu agente seja anterior a 2.7.3.5, acesse a seção Thread Settings na aba e verifique se a chave Method stack for thread profiling está ativada. Se essa chave estiver desativada, as informações da pilha de métodos não serão registradas. Quando ativada, a coleta ocorre a cada 5 minutos.
Para versões do agente 2.7.3.5 ou posteriores, acesse a seção Continuous profiling na aba e confirme se tanto o main switch quanto a chave CPU hotspots estão ativados. Ambas as chaves precisam estar habilitadas para registrar as informações da pilha de métodos.