Our Java (Web) Application runs in JBoss 6x. When slowness was reported:
- Thread Stack Dump was taken(Details below)
- Memory was examined - Memory usage was found to be very high, almost touching Max Allowed Heap Size, but no Out of Memory.
The Thread Stack Dump shows most threads blocked on Logging with these kind of errors:
waiting for monitor entry [0x000000004b6be000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.jboss.logmanager.handlers.WriterHandler.doPublish(WriterHandler.java:59)
- waiting to lock <0x00002aaac9a2de68> (a java.lang.Object)
at org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:64)
And like this:
java.lang.Thread.State: BLOCKED (on object monitor)
at java.io.PrintStream.println(PrintStream.java:756)
- waiting to lock <0x00002aaac9817a08> (a com.whatever.SomeClass)
at com.something.ThatClass.thatMethod(ThatClass.java:169)
The com.whatever.SomeClass uses org.apache.log4j.Logger
We use Log4j for logging.
It appears the threads are all blocked on some logging operation. This problem has occurred in the past too, and appears to be random, and it slows down/halts the application.
Any ideas?