スレッドダンプの読み取り
各スレッドダンプはスナップショットが収集されたタイムスタンプで開始します。
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)

このコールスタックでは、Support Tool 拡張機能のメソッドを使用してスレッド情報を取得しています。dumpAllStacks メソッドは、組み込み Java プラットフォームに対してスレッド情報をリクエストする dumpThreadInfo メソッドを呼び出します。
これらの Java クラスを呼び出すサービスの名前が、通常はコールスタックの下にリストされています。この場合、コールスタックの一部として DumpAllThreads サービスがリストされています。processService メソッドは必ずカスタムサービスを呼び出します。コールスタックで processService の後ろにリストされているサービスをチェックすることで、特定のサービスが実行されたスレッドを取得できます。
スレッドには次の状態があります。
RUNNABLE - 良好な状態。オペレーションを実行するために必要なすべてのリソースがスレッドに割り当てられていることを示します。
BLOCKED - スレッドはオペレーションを完了するために別のスレッドのオブジェクトを待機していることを示します。
TIME_WAITING - スレッドはリソースにアクセスするためにシンクロナイザーを待機しているか、なんらかの追加入力を待機している (WAITING 状態とほぼ同じ) ことを示します。
WAITING - スレッドが処理をまったく行っていないことを示します。さらなる入力を待機しています。これは取り込まれたスレッドの 99 % でデフォルトの標準状態です。
* 
Support Tool 拡張機能の代わりに Java jstack コマンドを使用して出力を収集した場合、多くのスレッドが BLOCKED 状態で表示されます。実際には、スレッドは TIME_WAITING 状態です。一部のタイプのスレッドではこれがデフォルトの状態です。この問題を回避するには、jstack コマンドを sudo -u <Tomcat ユーザー> jstack <pid> として実行します。