Tengo una aplicación basada en Java EE que se ejecuta en tomcat y veo que, de repente, la aplicación se cuelga después de ejecutarse durante un par de horas.Analizando el volcado de subprocesos de un proceso de Java
I recogió el volcado de hilo de la aplicación justo antes de que cuelga y la puso en TDA para el análisis:
TDA (Thread Dump Analyzer) da el siguiente mensaje para el monitor de arriba:
A lot of threads are waiting for this monitor to become available again.
This might indicate a congestion. You also should analyze other locks
blocked by threads waiting for this monitor as there might be much more
threads waiting for it.
Y aquí es el StackTrace de la rosca destacó anteriormente:
"MY_THREAD" prio=10 tid=0x00007f97f1918800 nid=0x776a
waiting for monitor entry [0x00007f9819560000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.util.Hashtable.get(Hashtable.java:356)
- locked <0x0000000680038b68> (a java.util.Properties)
at java.util.Properties.getProperty(Properties.java:951)
at java.lang.System.getProperty(System.java:709)
at com.MyClass.myMethod(MyClass.java:344)
Quiero saber qué significa el estado "waiting for monitor entry"
? Y también agradecería cualquier sugerencia para ayudarme a depurar este problema.
I guardaría en caché las búsquedas de las propiedades del sistema en lugar de llamarlas de este modo repetidas veces. No debería necesitar llamar a System.getProperty() más de una docena de veces durante la vida de la aplicación. es decir, debe codificarlo para que no sea un cuello de botella. –
hmm ... ¡buen punto Peter! – peakit