[ 
https://issues.apache.org/jira/browse/LOG4J2-3549?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17564785#comment-17564785
 ] 

Ralph Goers commented on LOG4J2-3549:
-------------------------------------

Yes. If you look at OutputStreamManager you will notice that several methods 
are synchronized. This is because OutputStream provides no guarantees on how 
write will behave so we need to prevent multiple threads from corrupting the 
data. However, you will notice that the call to both PrintStream and 
BufferedOutputStream also end up locking, so you would have gotten the 
contention anyway.

This simply means you are logging more than you file system can handle. You 
either need to log less, log to multiple files (which may not solve the problem 
if they are on the same disk), or get faster disk.  You should look at the I/O 
statistics for your device and see what your io wait looks like.

> The printed thread blocked
> --------------------------
>
>                 Key: LOG4J2-3549
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-3549
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Log4j 1.2 bridge
>    Affects Versions: 2.17.2
>            Reporter: yimiluo
>            Priority: Minor
>         Attachments: image-2022-07-08-20-20-11-818.png
>
>
> When we were printing the log, the printed thread was blocked, causing the 
> service to go down. The following is the exception information:
> !image-2022-07-08-20-20-11-818.png|width=895,height=537!
> {code:java}
> [arthas@1]$ thread -b
> "http-nio-8080-exec-5" Id=97 RUNNABLE (in native)
>     at java.base@11.0.8-ga/java.io.FileOutputStream.writeBytes(Native Method)
>     at 
> java.base@11.0.8-ga/java.io.FileOutputStream.write(FileOutputStream.java:354)
>     at 
> java.base@11.0.8-ga/java.io.BufferedOutputStream.write(BufferedOutputStream.java:123)
>     -  locked java.io.BufferedOutputStream@ea9396a
>     at java.base@11.0.8-ga/java.io.PrintStream.write(PrintStream.java:559)
>     -  locked java.io.PrintStream@3ff1e46c
>     at 
> org.apache.logging.log4j.core.util.CloseShieldOutputStream.write(CloseShieldOutputStream.java:53)
>     at 
> org.apache.logging.log4j.core.appender.OutputStreamManager.writeToDestination(OutputStreamManager.java:250)
>     at 
> org.apache.logging.log4j.core.appender.OutputStreamManager.flushBuffer(OutputStreamManager.java:283)
>     -  locked 
> org.apache.logging.log4j.core.appender.OutputStreamManager@7ba4158c <---- but 
> blocks 236 other threads!
>     at 
> org.apache.logging.log4j.core.appender.OutputStreamManager.flush(OutputStreamManager.java:294)
>     -  locked 
> org.apache.logging.log4j.core.appender.OutputStreamManager@7ba4158c <---- but 
> blocks 236 other threads!
>     at 
> org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.directEncodeEvent(AbstractOutputStreamAppender.java:199)
>     at 
> org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.tryAppend(AbstractOutputStreamAppender.java:190)
>     at 
> org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:181)
>     at 
> org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:161)
>     at 
> org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:134)
>     at 
> org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:125)
>     at 
> org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:89)
>     at 
> org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:542)
>     at 
> org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:500)
>     at 
> org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:483)
>     at 
> org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:417)
>     at 
> org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:82)
>     at org.apache.logging.log4j.core.Logger.log(Logger.java:161)
>     at 
> org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2205)
>     at 
> org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2159)
>     at 
> org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2142)
>     at 
> org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2028)
>     at 
> org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1891)
>     at org.apache.logging.slf4j.Log4jLogger.info(Log4jLogger.java:194) {code}
>  
> I don't know what the solution is now. I would be very grateful if you could 
> reply.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to