Log4j2.0 异步记录器导致 OutOfMemory Java 堆空间

li *_*iru 5 java logging asynchronous out-of-memory log4j2

我将我公司的系统配置为通过将系统属性设置Log4jContextSelectororg.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
Run Code Online (Sandbox Code Playgroud)

然后我将最大堆大小增加到 4 gigs(总物理内存为 8G),并导致了另一个问题:

SEVERE: Exception processing: 775221 org.apache.logging.log4j.core.async.RingBufferLogEvent@1c6b80a9
java.lang.OutOfMemoryError: GC overhead limit exceeded
Run Code Online (Sandbox Code Playgroud)

Rem*_*pma 2

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 票证,因为这种情况不应该发生。