Pestaña Hilos de JConsole: comprender información
Pregunta
Estoy ejecutando JBoss 5. Veo que el mantenimiento de memoria aumenta a medida que pasa el tiempo. El número de subprocesos activos está aumentando. El siguiente stacktrace se toma de un hilo activo que es uno de los muchos hilos (estos son los hilos que se agregan a medida que pasa el tiempo). ¿Qué puedo aprender del stacktrace? ¿Cómo puedo profundizar y tener una visión más clara de lo que está sucediendo?
Nombre: WorkManager (2) -92 Estado: ESPERANDO en java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4e2e52 Total bloqueado: 1 Total esperado: 1
Seguimiento de pila: sun.misc.Unsafe.park (Método nativo) java.util.concurrent.locks.LockSupport.park (LockSupport.java:158) java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject.await (AbstractQueuedSynchronizer.java:1925) java.util.concurrent.LinkedBlockingQueue.take (LinkedBlockingQueue.java:358) java.util.concurrent.ThreadPoolExecutor.getTask (ThreadPoolExecutor.java:947) java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:907) java.lang.Thread.run (Thread.java:619)
Gracias Rod
Solución
Parece que ese hilo está esperando getTask (), es decir, solo está esperando que se realice algún trabajo.
Se generarán nuevos hilos a medida que lleguen las solicitudes, no debe preocuparse por ello a menos que haya una gran cantidad de hilos ocupados con el trabajo real.
El uso de memoria crecerá con el tiempo hasta que la JVM decida recolectar basura. Si sigue creciendo, y ejecutar GC desde jconsole no hace ninguna diferencia, es posible que tenga una pérdida de memoria. Encontrar fugas puede ser difícil, pero puede usar MAT para hacerlo más fácil.
Otros consejos
Aprenderá más de esto ejecutando JConsole desde JDK1.6 o JDK1.7. El JConsole.exe en JDK1.5 es '' old-school ''.