我通过设置系统将我公司的系统配置为让所有记录器异步
属性 Log4jContextSelector
到 org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
。我们使用 log4j 2.0。
当我通过系统运行一个小的输入文件时没有问题。但是当我运行一个更大的输入文件时(我们的系统应该运行比这大得多的文件),导致了 OutOfMemoryError
。信息如下:
SEVERE: Exception processing: 14451294 org.apache.logging.log4j.core.async.RingB ufferLogEvent@226dc6bf
java.lang.OutOfMemoryError: Java heap space
然后我将最大堆大小增加到 4 gigs(总物理内存为 8G),导致另一个问题:
SEVERE: Exception processing: 775221 org.apache.logging.log4j.core.async.RingBufferLogEvent@1c6b80a9
java.lang.OutOfMemoryError: GC overhead limit exceeded
最佳答案
Log4J 团队知道这一点:https://issues.apache.org/jira/browse/LOG4J2-414
2018-2-2 更新:
原始问题和上述 JIRA 票据是 5 年前针对 Log4j 2.0-beta9 提出的。
这是多年后的事了。 Log4j2 社区即将发布 Log4j 2.11。自 2.0-beta 9 版本以来,修复了几个内存泄漏错误。
如果有人在使用最新版本的 Log4j2 时遇到此问题,请提出新的 JIRA 票证,因为这不应该发生。
关于java - Log4j2.0 异步记录器导致 OutOfMemory Java 堆空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19104190/