我正在以调试模式运行Tomcat Web应用程序,并使用YourKit Profiler查看最大的对象,到目前为止,最大的对象是com.lmax.disruptor.RingBuffer
的单个实例。我认为这与log4j有关,它在内部使用RingBuffer
异步报告。有什么办法可以减少该对象的内存占用?为什么这么大?
异步模式下Apache Log4j2的实现使用RingBuffer来缓冲所有日志内容。默认情况下使用262144个插槽(256 *1024)。这将导致大约40的初始存储空间兆字节,并且在内存有限的环境中会导致内存不足头总是充满,因此开始减速。
要减少内存使用量,请通过设置系统属性来减小RingBuffer的大小(插槽数):
log4j2.asyncLoggerRingBufferSize=value
最小大小为128。要分配5Mb,请将值设置为32768。有关更多信息,请参见Log4j Async Loggers。