Lmax RingBuffer с log4j занимает много памяти - PullRequest
1 голос
/ 10 февраля 2020

Я запускаю веб-приложение Tomcat в режиме отладки и, просматривая самые большие объекты с помощью профилировщика YourKit, я вижу, что самым большим из них является единственный экземпляр com.lmax.disruptor.RingBuffer. Я предполагаю, что это имеет что-то с log4j, который использует RingBuffer для асинхронного отчета. Есть ли способ уменьшить объем памяти этого объекта? Почему он такой большой?

1 Ответ

2 голосов
/ 10 февраля 2020

Из Asyn c Log4j2, утечка памяти? :

Реализация Apache Log4j2 в асинхронном режиме c использует RingBuffer для буферизации всех журналов содержание. По умолчанию используется 262144 слота (256 * 1024). Это приводит к тому, что начальный резерв памяти составляет приблизительно 40 мегабайт, а в среде с ограниченной памятью головка памяти всегда заполнена и, следовательно, начинается замедление.

Чтобы уменьшить использование памяти, уменьшите RingBuffer размер (количество слотов) путем установки системного свойства:

log4j2.asyncLoggerRingBufferSize=value

Минимальный размер 128. Чтобы выделить 5 МБ, установите значение 32768. См. Log4j Asyn c Регистраторы для больше информации.

...