讀取執行緒傾印
收集快照時,每個執行緒傾印都會以時間戳記開始:
Full thread dump taken at Thu Aug 1 07:19:59 EDT 2019
JVM 執行緒傾印會顯示涉及在特定執行緒上執行之任何伺服器操作的呼叫堆疊。呼叫堆疊不會指示伺服器上的錯誤,但經常發生的錯誤也會顯示呼叫堆疊。呼叫堆疊會以呼叫特定方法的相反順序呼叫。請參閱下列範例:
"http-nio-8080-exec-8" tid=0x114 in RUNNABLE
Blocked: 32[-1ms], Waited: 99[-1ms]
User CPU: 109ms
- synchronizer <0x4206a205> (a java.util.concurrent.ThreadPoolExecutor$Worker)
at sun.management.ThreadImpl.dumpThreads0(Native Method)
at sun.management.ThreadImpl.dumpAllThreads(Unknown Source)
at com.thingworx.support.utilities.Stacktrace.dumpThreadInfo(Stacktrace.java:70)
at com.thingworx.support.utilities.Stacktrace.dumpAllStacks(Stacktrace.java:64)
- locked <0x4cdd9461> (a java.lang.Class)
at com.thingworx.support.utilities.Stacktrace.dumpAllStacks(Stacktrace.java:38)
- locked <0x4cdd9461> (a java.lang.Class)
at com.thingworx.support.utilities.SupportToolsTemplate.DumpAllThreads(SupportToolsTemplate.java:202)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.thingworx.common.processors.ReflectionProcessor.processService(ReflectionProcessor.java:261)
at com.thingworx.handlers.ReflectionServiceHandler.processService(ReflectionServiceHandler.java:50)
at com.thingworx.things.Thing.processServiceRequestDirect(Thing.java:7886)
at com.thingworx.things.Thing.processAPIServiceRequest(Thing.java:7824)
at com.thingworx.webservices.BaseService.handleInvoke(BaseService.java:3077)
at com.thingworx.webservices.BaseService.service(BaseService.java:356)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)

在呼叫堆疊中,支援工具延伸功能方法可用來取得執行緒資訊。dumpAllStacks 方法會呼叫 dumpThreadInfo 方法,向內建 Java 平台請求執行緒資訊。
呼叫這些 Java 類別的服務名稱通常會列在呼叫堆疊的下方。在此情況下,DumpAllThreads 服務會列為呼叫堆疊的一部份。processService 方法會始終呼叫自訂服務。檢查在呼叫堆疊中在 processService 之後的服務,可讓您取得執行特定服務所在的執行緒。
執行緒具有下列狀態:
RUNNABLE - 狀態良好。這表示執行緒擁有執行操作所需的所有資源。
BLOCKED - 這表示執行緒正在等待另一個執行緒中的物件,之後才能完成操作。
TIME_WAITING - 這表示執行緒正在等待同步器存取資源,或正在等待其他某些輸入 (類似 WAITING 狀態)
WAITING - 這表示執行緒並未執行任何工作,它正在等待進一步的輸入。這是捕捉的 99% 執行緒的預設正常狀態。
* 
如果您使用 Java jstack 指令而非 支援工具延伸功能來收集輸出,許多執行緒會顯示為 BLOCKED 狀態。但是,執行緒處於 TIME_WAITING 狀態。這可能是某些類型執行緒的預設狀態。為避免發生此情況,請以 sudo -u <tomcatUser> jstack <pid> 的方式執行 jstack 指令。