lmax环形缓冲区与log4j一起使用会占用大量内存。

5

我正在以调试模式运行Tomcat Web应用程序,通过YourKit分析器查看最大对象时,发现远远最大的是一个单一实例的com.lmax.disruptor.RingBuffer。我认为这与log4j有关,它在内部使用RingBuffer异步报告。有没有办法减少此对象的内存占用?为什么它如此庞大?


它有多大?Tomcat的版本是什么? - Boris
42M,运行在Tomcat 9上,使用Java 8。 - Johnny
42M真的是一个问题吗? - Thilo
2
没问题,但我很好奇。 - Johnny
1个回答

4

来自Async Log4j2,内存泄漏?

在异步模式下,Apache Log4j2的实现使用RingBuffer缓冲所有日志内容。默认使用262144个插槽(256 * 1024)。这将导致大约40MB的初始内存储备,并且在具有有限内存的环境中会导致内存过度占用,从而导致启动变慢。

为了减少内存使用量,可以通过设置系统属性来减小RingBuffer的大小(插槽数量):

log4j2.asyncLoggerRingBufferSize=value

最小大小为128。要分配5Mb,请将值设置为32768。有关更多信息,请参见Log4j异步记录器


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接