[ 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)