пытаюсь загрузить программу jemalloc для Java, чтобы найти утечку собственной памяти, но не могу заставить ее работать. Действия, выполненные на данный момент
версии: Mac OS 14.3, JDK 11, jemalloc-5.3.0.
1.Установил jemalloc через Brew.
2.установить переменную env LD_PRELOAD= {path_to_lib}/libjemalloc.2.dylib (также пробовал libjemalloc.dylib)
3.и это также MALLOC_CONF=prof:true,lg_prof_interval:10,lg_prof_sample:17,prof_prefix:my_path
и я ожидаю, по крайней мере, некоторых журналов, которые покажут мне, работает ли это, но я не вижу журналов и не вижу jeprof.**.heap
Я даже запускал обычную программу с LD_PRELOAD= {path_to_lib}/libjemalloc.2.dylib MALLOC_CONF=prof:true,lg_prof_interval:10,lg_prof_sample:17,prof_prefix:my_path java test.jar
моя Java-программа просто пропускает собственную память через Bytebuffer.allocateDirect() и хочу проверить это через jemalloc.
Вопросы :
ByteBuffer.allocateDirect
регистрирует память с помощью очистителя для очистки, когда экземпляр ByteBuffer
является GCd. Если утечка этой памяти происходит, то это происходит из-за утечки самих экземпляров ByteBuffer
. Это не то, что может обнаружить встроенное отслеживание памяти.
Я имею в виду, что я просто подумал, что это может привести к утечке памяти, но главный вопрос в том, почему jemalloc не работает должным образом, моя конфигурация неверна?
@aled, согласно ответам в Интернете и stackoverflow, я должен видеть файлы jeprof.*.heap в моей локальной папке, где я запускаю программу
LD_PRELOAD
специфичен для Linux.
В macOS существует другой механизм предварительной загрузки общих библиотек. Ищите DYLD_INSERT_LIBRARIES
. Обратите внимание, что это может не работать, если включен SIP (защита целостности системы).
а как насчет MALLOC_CONF? для Mac есть ли какая-то конкретная опция для этого? Я вижу mallocctl и _RJEM_MALLOC_CONF, но оба не работают.
и я думаю, что DYLD_INSERT_LIBRARIES работает, потому что с DYLD_INSERT_LIBRARIES вместо LD_PRELOAD я вижу по крайней мере это сейчас (с переменной env MALLOC_CONF) <jemalloc>: Неверная пара conf: prof:true <jemalloc>: Неверная пара conf: lg_prof_interval:10 <jemalloc >: Неверная пара conf: lg_prof_sample:17 <jemalloc>: Неверная пара conf: prof_prefix:test, поэтому я думаю, что проблема с LD_Preload решена, просто ожидается Malloc_conf
@prasannajoshi Вероятно, вы установили версию jemalloc без функции профилирования. Пересоберите jemalloc из исходников с опцией --enable-prof
.
Что значит «невозможно заставить это работать»? Есть ли ошибки?