带有log4j的lmax RingBuffer占用大量内存

问题描述 投票:0回答:1

我正在以调试模式运行Tomcat Web应用程序,并使用YourKit Profiler查看最大的对象,到目前为止,最大的对象是com.lmax.disruptor.RingBuffer的单个实例。我认为这与log4j有关,它在内部使用RingBuffer异步报告。有什么办法可以减少该对象的内存占用?为什么这么大?

java tomcat tomcat9
1个回答
0
投票

来自Async Log4j2, memory leak?

异步模式下Apache Log4j2的实现使用RingBuffer来缓冲所有日志内容。默认情况下使用262144个插槽(256 *1024)。这将导致大约40的初始存储空间兆字节,并且在内存有限的环境中会导致内存不足头总是充满,因此开始减速。

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

log4j2.asyncLoggerRingBufferSize=value

最小大小为128。要分配5Mb,请将值设置为32768。有关更多信息,请参见Log4j Async Loggers

© www.soinside.com 2019 - 2024. All rights reserved.