Lectura de los volcados de subproceso
Cada volcado de subproceso empieza con una fecha y hora en la que se recopila la instantánea:
Full thread dump taken at Thu Aug 1 07:19:59 EDT 2019
En los volcados de subprocesos de la JVM se muestra la pila de llamadas que intervienen en cualquier operación del servidor que se ejecute en un subproceso específico. Una pila de llamadas no indica un error en el servidor, aunque en un error frecuente también se muestra una pila de llamadas. Una pila de llamadas permite mostrar en orden inverso cómo se han invocado métodos específicos. Consulte el siguiente ejemplo:
"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)

En la pila de llamadas, el subsistema de soporte se utiliza para obtener información del subproceso. El método dumpAllStacks invoca el método dumpThreadInfo, que solicita la información de subproceso de la plataforma integrada de Java.
El nombre del servicio que invoca estas clases Java se suele mostrar debajo de la pila de llamadas. En este caso, el servicio DumpAllThreads se muestra como parte de la pila de llamadas. El método processService siempre invoca los servicios personalizados. La verificación de los servicios que muestran después de processService en la pila de llamadas permite obtener el subproceso en el que se ejecuta un servicio específico.
Un subproceso tiene los siguientes estados:
RUNNABLE: buen estado. Se indica que el subproceso tiene todos los recursos que necesita para realizar las operaciones.
BLOCKED: se indica que el subproceso está esperando un objeto de otro subproceso antes de que pueda completar la operación.
TIME_WAITING: se indica que el subproceso está esperando a que un sincronizador acceda a un recurso o está esperando alguna entrada adicional (similar al estado WAITING).
WAITING: se indica que los subprocesos no están realizando ningún trabajo. Está a la espera de una entrada posterior. Este es el estado normal por defecto para el 99 % de los subprocesos de una captura.
* 
Si se recopila la salida mediante el comando jstack de Java en lugar del subsistema de soporte, muchos subprocesos se muestran en estado BLOCKED. Sin embargo, los subprocesos se encuentran en estado TIME_WAITING. Este estado puede ser el estado por defecto para algunos tipos de subprocesos. Para evitarlo, ejecute el comando jstack como sudo -u <tomcatUser> jstack <pid>.
¿Fue esto útil?