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();
}
}