Java 带有log4j的lmax RingBuffer占用大量内存
我正在调试模式下运行Tomcat web应用程序,通过YourKit profiler查看最大的对象,我发现最大的是Java 带有log4j的lmax RingBuffer占用大量内存,java,tomcat,log4j,tomcat9,Java,Tomcat,Log4j,Tomcat9,我正在调试模式下运行Tomcat web应用程序,通过YourKit profiler查看最大的对象,我发现最大的是com.lmax.disruptor.RingBuffer的单个实例。我假设这与log4j有关,它在内部使用RingBuffer异步报告。有什么方法可以减少这个对象的内存占用吗?为什么这么大?来自: 异步模式下Apache Log4j2的实现使用一个RingBuffer 缓冲所有日志内容。默认情况下,使用262144个插槽(256个* 1024). 这会导致初始内存储备约为40 M
com.lmax.disruptor.RingBuffer
的单个实例。我假设这与log4j有关,它在内部使用RingBuffer
异步报告。有什么方法可以减少这个对象的内存占用吗?为什么这么大?来自:
异步模式下Apache Log4j2的实现使用一个RingBuffer
缓冲所有日志内容。默认情况下,使用262144个插槽(256个*
1024). 这会导致初始内存储备约为40
MB,并且在内存有限的环境中会导致内存不足
头部始终充满,因此开始减速
要减少内存使用,请通过设置系统属性来减少RingBuffer大小(插槽数):
log4j2.asyncLoggerRingBufferSize=value
最小尺寸为128。要分配5Mb,请将该值设置为32768。有关更多信息,请参阅。它有多大?什么是Tomcat版本?42M,运行在Tomcat 9上,使用Java 8。42M真的是个问题吗?不是问题,但我很好奇。