Java log4j RollingFileAppender性能

Java log4j RollingFileAppender性能,java,performance,log4j,Java,Performance,Log4j,我需要大量日志以进行进一步分析,因此,当文件滚动时,整个流会停滞一段时间,执行如下操作: "org.springframework.kafka.KafkaListenerEndpointContainer#1-1-C-1" - Thread t@56 java.lang.Thread.State: BLOCKED at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.checkRollover(Ro

我需要大量日志以进行进一步分析,因此,当文件滚动时,整个流会停滞一段时间,执行如下操作:

"org.springframework.kafka.KafkaListenerEndpointContainer#1-1-C-1" - Thread t@56
   java.lang.Thread.State: BLOCKED
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.checkRollover(RollingFileManager.java:174)
    - waiting to lock <2afdff68> (a org.apache.logging.log4j.core.appender.rolling.RollingFileManager) owned by "SrpResultsProcessor-8" t@90
    at org.apache.logging.log4j.core.appender.RollingFileAppender.append(RollingFileAppender.java:280)
    at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156)
    at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129)
    at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
    at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
    at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:447)
    at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:432)
    at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:416)
    at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:402)
    at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63)
    at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:146)
    at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2091)
    at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2005)
    at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1876)
    at org.apache.logging.slf4j.Log4jLogger.debug(Log4jLogger.java:124)
...    
有什么改进“滚动”性能的想法吗

-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

这是一个高并发性问题,它按设计工作。文件系统(I/O)没有足够的性能

尝试获取资源时,synchronized会阻塞一些Java监视器

/**
 * Determines if a rollover should occur.
 * @param event The LogEvent.
 */
public synchronized void checkRollover(final LogEvent event) {
    if (triggeringPolicy.isTriggeringEvent(event)) {
        rollover();
    }
}
上面提到的解决方案是转向异步日志记录


使用一种新的方法。让我们在自己的时间内处理文件滚动。您当前的log4j配置是什么?
/**
 * Determines if a rollover should occur.
 * @param event The LogEvent.
 */
public synchronized void checkRollover(final LogEvent event) {
    if (triggeringPolicy.isTriggeringEvent(event)) {
        rollover();
    }
}