Загрузочное приложение Spring не использует jemalloc

Я пытаюсь выяснить проблему утечки памяти. Я следую этой статье и пытаюсь использовать jemalloc

Следующие шаги:

export LD_PRELOAD=/usr/local/lib/libjemalloc.so
export MALLOC_CONF=prof:true,lg_prof_interval:30,lg_prof_sample:17
sudo java -jar application.jar

Однако файл.heap не создан. Я не могу найти libjemalloc.so в pmap -x результате. Как я могу убедиться, что jvm использует jemalloc? Сервер является сервером Ubuntu, и приложение использует весеннюю загрузку.

1 ответ

Решение

Когда ты бежишь sudoJava получает корневую среду, в которую вы не экспортировали ранее LD_PRELOAD а также MALLOC_CONF,

Пытаться

sudo LD_PRELOAD=/usr/local/lib/libjemalloc.so \
     MALLOC_CONF=prof:true,lg_prof_interval:30,lg_prof_sample:17 \
     java -jar application.jar

КСТАТИ, jemalloc не всегда полезно для профилирования Java-приложений, поскольку не может отображать стеки Java (но полезно для предотвращения утечек памяти, вызванных стандартным распределителем).

Попробуйте использовать async-profiler, как описано в этом ответе.

Также проверьте этот пост о потреблении памяти в Java.

Другие вопросы по тегам