Lecture des thread dumps
Chaque thread dump commence par un horodatage lorsque l'instantané est collecté :
Full thread dump taken at Thu Aug 1 07:19:59 EDT 2019
Les thread dumps d'une JVM affichent la pile d'appels impliquée dans les opérations serveur exécutées sur un thread spécifique. Une pile d'appels ne désigne pas une erreur sur le serveur, bien qu'une erreur fréquente affiche également une pile d'appels. Une pile d'appels affiche dans l'ordre inverse la façon dont des méthodes spécifiques ont été appelées. Par exemple :
"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)

Dans la pile d'appels, les méthodes d'extension Support Tools sont utilisées pour obtenir des informations sur les threads. La méthode dumpAllStacks appelle la m&éthode dumpThreadInfo qui demande les informations sur les threads auprès de la plate-forme Java intégrée.
Le nom du service qui appelle ces classes Java est généralement répertorié sous la pile d'appels. En l'occurrence, le service DumpAllThreads est répertorié comme faisant partie de la pile d'appels. La méthode processService appelle toujours les services personnalisés. La recherche de services répertoriés sous processService dans la pile d'appels vous permet d'obtenir le thread sur lequel un service spécifique est exécuté.
Un thread possède les états suivants :
EXECUTABLE : bon état. Cet état indique que le thread possède toutes les ressources dont il a besoin pour exécuter les opérations.
BLOCKED : indique que le thread attend un objet dans un autre thread avant de pouvoir terminer l'opération.
TIME_WAITING : indique que le thread attend un synchronisateur pour accéder à une ressource ou qu'il attend une information supplémentaire (similaire à l'état WAITING).
WAITING : indique que les threads n'effectuent aucune opération. Il attend d'avantage d'informations en entrée. Il s'agit de l'état normal par défaut de 99 % des threads dans une capture.
* 
Si vous collectez le résultat à l'aide de la commande Java jstack au lieu de l'extension Outils de support, de nombreux threads sont affichés avec l'état BLOCKED. Toutefois, les threads prennent l'état TIME_WAITING. Il peut s'agir de l'état par défaut de certains types de threads. Pour éviter cela, exécutez la commande jstack comme ceci : sudo -u <utilisateurTomcat> jstack <pid>.