Загрузочное приложение Spring не использует jemalloc - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь выяснить проблему утечки памяти. Я следую этой статье и пытаюсь использовать 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 Ответ

0 голосов
/ 08 января 2019

Когда вы запускаете sudo, Java получает корневую среду, в которой нет ранее экспортированных 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 (но это полезно для предотвращения утечек памяти, вызванных стандартным распределителем) .

Попробуйте асинхронный профилировщик, как описано в этот ответ .

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

...