We have running multiple instances of application ( one per tomcat server ) on single physical host.
Application do decent logging.
Recently we have observed that some applications getting slower or hang and need to be restarted.
In thread dump, it is found that all thread were BLOCKED on log statement, waiting for lock on println
object. and some other object has already taken lock on println
.
But i couldn't figure out why other thread not released lock on println
object ?
I pasting some thread dump snapshots :
BLOCKED Thread dump :
java.lang.Thread.State: BLOCKED (on object monitor)
at java.io.PrintStream.println(PrintStream.java:755)
- waiting to lock <0x00000007830097e0> (a java.io.PrintStream)
at org.apache.tomcat.util.log.SystemLogHandler.println(SystemLogHandler.java:238)
at com.webaroo.smsnew.common.SMSUtils.log(SMSUtils.java:167)
at com.webaroo.smsnew.common.SMSUtils.log(SMSUtils.java:113)
Thread dump of thread who taken log of println.
java.lang.Thread.State: BLOCKED (on object monitor)
at java.nio.CharBuffer.wrap(CharBuffer.java:350)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:246)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
- locked <0x00000007830098f0> (a java.io.OutputStreamWriter)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:190)
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:111)
- locked <0x00000007830098f0> (a java.io.OutputStreamWriter)
at java.io.PrintStream.write(PrintStream.java:476)
- locked <0x00000007830097e0> (a java.io.PrintStream)
at java.io.PrintStream.print(PrintStream.java:619)
at java.io.PrintStream.println(PrintStream.java:756)
- locked <0x00000007830097e0> (a java.io.PrintStream)
at org.apache.tomcat.util.log.SystemLogHandler.println(SystemLogHandler.java:238)