lmax RingBuffer 与 log4j 占用大量内存

Joh*_*nny 5 java tomcat log4j tomcat9

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

Bor*_*ris 4

来自Async Log4j2,内存泄漏?:

Apache Log4j2 在异步模式下的实现使用 RingBuffer 来缓冲所有日志内容。默认情况下使用 262144 个插槽 (256 * 1024)。这会导致初始内存保留约为 40 MB,并且在内存有限的环境中会导致内存头始终已满,从而导致启动速度变慢。

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

log4j2.asyncLoggerRingBufferSize=value
Run Code Online (Sandbox Code Playgroud)

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