全部產品
Search
文件中心

Application Real-Time Monitoring Service:線程分析

更新時間:Aug 21, 2026

線程分析功能提供線程粒度的CPU耗時和每類線程數量的統計,並且每5分鐘記錄一次線程的方法棧並彙總,可真實還原代碼執行過程,協助您快速定位線程問題。當發現叢集的CPU使用率過高,或者出現大量慢方法時,可以通過線程分析功能找到消耗CPU最多的線程或方法。

功能入口

  1. 登入ARMS控制台,在左側導覽列選擇應用監控 > 應用列表。

  2. 在應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。

    說明

    語言列的表徵圖含義如下:

    Java表徵圖:接入應用監控的Java應用。

    image:接入應用監控的Golang應用。

    image:接入應用監控的Python應用。

    -:接入Managed Service for OpenTelemetry的應用。

  3. 在左側導覽列中選擇应用诊断 > 线程分析。

進行線程分析

线程分析頁面的左側列表展示了應用的全部線程,您可以根據CPU耗時統計快速發現異常線程。選中某一異常線程後,再根據右側的CPU耗時和線程數曲線圖分析CPU耗時與線程數變化,例如分析每分鐘的線程總數是否過多。

其中線程數曲線圖按線程狀態分為 RUNNABLE、TIMED_WAITING、WAITING 三類分別展示趨勢。左側線程列表支援按線程數或CPU耗時排序,頂部可通過輸入主機 IP 進行搜尋篩選。

您還可以單擊異常線程的方法栈,查看指定時間內的真實運行方法棧,例如查看處於BLOCKED狀態的線程對應的方法,從而最佳化指定程式碼片段,以便降低CPU使用率。

例如,篩選 Scheduler Worker 線程後,方法棧分析結果樣本如下。


ALL: 365194  RUNNABLE: 986  BLOCKED: 87  WAITING: 1498  TIMED_WAITING: 362617

【BLOCKED】81/87(次) - 佔比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.connectionPool.checkoutPooledConnection (C3P0PooledConnectionPool.java:525)
  at xxx.dDataSource.getConnection (AbstractPoolBackedDataSource.java:128)
  at xxx.tConnection (PoolingConnectionProvider.java:247)
  at xxx.nnection (DBConnectionManager.java:108)
  at xxx.rt.getConnection (JobStoreSupport.java:775)
  at xxx.EnhanceJobStoreSupport.getNonManagedTXConnection (EnhanceJobStoreSupport.java:17)
  at xxx.Support.executeInNonManagedTXLock (JobStoreSupport.java:3777)
  at xxx.eSupport.retryExecuteInNonManagedTXLock (JobStoreSupport.java:3742)
  at xxx.reSupport.triggeredJobComplete (JobStoreSupport.java:3039)
  at xxx.ntifyJobStoreJobComplete (QuartzScheduler.java:1804)
  at xxx.obRunShell.java:269)
  at xxx.l$WorkerThread.run (SimpleThreadPool.java:573)

【BLOCKED】2/87(次) - 佔比2.30%

at xxx.checkinStatement (GooGooStatementCache.java:220)
  at xxx.heckinStatement (NewPooledConnection.java:239)
  at xxx.ement.close (NewProxyPreparedStatement.java:1807)
  at xxx.seStatement (StdJDBCDelegate.java:3287)
  at xxx.leteFiredTrigger (StdJDBCDelegate.java:2916)
  at xxx.ggeredJobComplete (JobStoreSupport.java:3116)
  at xxx.45.executeVoid (JobStoreSupport.java:3043)
  at xxx.$VoidTransactionCallback.execute (JobStoreSupport.java:3703)
  at xxx.$VoidTransactionCallback.execute (JobStoreSupport.java:3701)
  at xxx.t.executeInNonManagedTXLock (JobStoreSupport.java:3787)
  at xxx.rt.retryExecuteInNonManagedTXLock (JobStoreSupport.java:3742)
  at xxx.ort.triggeredJobComplete (JobStoreSupport.java:3039)
  at xxx.StoreJobComplete (QuartzScheduler.java:1804)
  at xxx.Shell.java:269)
  at xxx.kerThread.run (SimpleThreadPool.java:573)

【BLOCKED】1/87(次) - 佔比1.15%

如果您的探針版本為2.7.3.5或以上版本,ARMS通過持續剖析能力提供了資料更準確的線程CPU使用方法棧資訊,效果如下圖所示,更多資訊,請參見持續剖析。

image

說明

如果單擊方法栈後,顯示無資料,排查方法如下:

  • 如果探針版本為2.7.3.5以下,則在应用配置 > 自定义配置頁簽的線程設定地區查看線程分析方法棧開關是否開啟。如未開啟,則無法記錄方法棧資訊;如已開啟,則每5分鐘採集一次方法棧資訊。

  • 如果探針版本為2.7.3.5及以上,則在应用配置 > 自定义配置頁簽的持續剖析地區查看總開關和CPU熱點開關是否開啟。如未開啟,則無法記錄方法棧資訊。