JBoss EAP deadlocks log4j RollingFileAppenders and java.io.PrintStream
Environment
- JBoss Enterprise Application Platform (EAP)
- 6.x
- 7.x
- Log4J deployed to the application war file.
- Separate application and server log streams.
org.jboss.as.logging.per-deployment= false
Issue
- Application logging stops writing to logs and periodically rotating
- A deadlock between multiple
RollingFileAppenders:
Resolution
- Remove application level log4j
RollingFileAppenders or ensure it does not have log4j debug enabled in the log4j properties file or through thelog4j.configDebugorlog4j.debugsystem properties.
Root Cause
- RollingFileAppender is printing debug messages about its activity through stdout and the app is writing through stdout to the log appender. Look for:
Diagnostic Steps
-
Run a set of thread dumps when it happens and look for BLOCKED threads on
java.io.PrintStream."Thread-2158" daemon prio=10 tid=0x00007ffb80077000 nid=0x7f61 waiting for monitor entry [0x00007ffbaae86000] java.lang.Thread.State: BLOCKED (on object monitor) at java.io.PrintStream.println(PrintStream.java:806) - waiting to lock <0x000000074ac95720> (a java.io.PrintStream) at org.jboss.stdio.StdioContext$DelegatingPrintStream.println(StdioContext.java:474) at org.apache.log4j.helpers.LogLog.debug(LogLog.java:100) at org.apache.log4j.RollingFileAppender.rollOver(RollingFileAppender.java:153) at org.apache.log4j.RollingFileAppender.subAppend(RollingFileAppender.java:280) at org.apache.log4j.WriterAppender.append(WriterAppender.java:162) at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251) - locked <0x000000074c79a260> (a org.apache.log4j.RollingFileAppender) at org.apache.log4j.JBossAppenderHandler.doPublish(JBossAppenderHandler.java:34) at org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:76) at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:302) at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:310) at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:310) at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:310) at org.jboss.logmanager.Logger.logRaw(Logger.java:719) at org.apache.log4j.Category.callAppenders(Category.java:69) at org.apache.log4j.Category.forcedLog(Category.java:121) at org.apache.log4j.Category.info(Category.java:241) "http-127.0.0.1:38443-5" daemon prio=10 tid=0x00007ffb8c019000 nid=0x6e40 waiting for monitor entry [0x00007ffba8a05000] java.lang.Thread.State: BLOCKED (on object monitor) at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:231) - waiting to lock <0x000000074c79a260> (a org.apache.log4j.RollingFileAppender) at org.apache.log4j.JBossAppenderHandler.doPublish(JBossAppenderHandler.java:34) at org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:76) at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:302) at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:310) at org.jboss.logmanager.Logger.logRaw(Logger.java:719) at org.jboss.logmanager.Logger.log(Logger.java:504) at org.jboss.stdio.AbstractLoggingWriter.write(AbstractLoggingWriter.java:71) - locked <0x000000074ac95788> (a java.lang.StringBuilder) at org.jboss.stdio.WriterOutputStream.finish(WriterOutputStream.java:143) at org.jboss.stdio.WriterOutputStream.flush(WriterOutputStream.java:164) - locked <0x000000074ac95840> (a sun.nio.cs.UTF_8$Decoder) at java.io.PrintStream.write(PrintStream.java:482) - locked <0x000000074ac95720> (a java.io.PrintStream) at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221) at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291) at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104) - locked <0x000000074ac95c18> (a java.io.OutputStreamWriter) at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185) at java.io.PrintStream.newLine(PrintStream.java:546) - locked <0x000000074ac95720> (a java.io.PrintStream) at java.io.PrintStream.println(PrintStream.java:807) - locked <0x000000074ac95720> (a java.io.PrintStream) at org.jboss.stdio.StdioContext$DelegatingPrintStream.println(StdioContext.java:474) ...
Components
Category
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.