Jemalloc с Java на Mac

пытаюсь загрузить программу 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.

Вопросы :

  1. jemalloc работает на Mac OS? Нужно ли мне устанавливать и собирать самому вместо Brew?
  2. Какая-то другая конфигурация отсутствует?

Что значит «невозможно заставить это работать»? Есть ли ошибки?

aled 15.07.2024 18:53
ByteBuffer.allocateDirect регистрирует память с помощью очистителя для очистки, когда экземпляр ByteBuffer является GCd. Если утечка этой памяти происходит, то это происходит из-за утечки самих экземпляров ByteBuffer. Это не то, что может обнаружить встроенное отслеживание памяти.
Jorn Vernee 15.07.2024 19:14

Я имею в виду, что я просто подумал, что это может привести к утечке памяти, но главный вопрос в том, почему jemalloc не работает должным образом, моя конфигурация неверна?

prasannajoshi 15.07.2024 19:20

@aled, согласно ответам в Интернете и stackoverflow, я должен видеть файлы jeprof.*.heap в моей локальной папке, где я запускаю программу

prasannajoshi 15.07.2024 19:28
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

LD_PRELOAD специфичен для Linux.

В macOS существует другой механизм предварительной загрузки общих библиотек. Ищите DYLD_INSERT_LIBRARIES. Обратите внимание, что это может не работать, если включен SIP (защита целостности системы).

а как насчет MALLOC_CONF? для Mac есть ли какая-то конкретная опция для этого? Я вижу mallocctl и _RJEM_MALLOC_CONF, но оба не работают.

prasannajoshi 15.07.2024 20:40

и я думаю, что 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 15.07.2024 20:43

@prasannajoshi Вероятно, вы установили версию jemalloc без функции профилирования. Пересоберите jemalloc из исходников с опцией --enable-prof.

apangin 15.07.2024 22:34

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

Проблема утечки памяти с PHP и queryFontMetrics от Imagick
Утечка памяти с использованием NVML от Nvidia
Ошибка сегментации (сброс ядра) при чтении двоичного файла, memmove-vec-unaligned-erms.S: Нет такого файла или каталога
Утечка памяти Haskell, работающая с зонированным временем и добавляющая/вычитающая секунды
Утечка памяти с использованием статического члена unique_ptr
Утечка памяти, которую не устраняет GC в отношении .Net Entity Framework версии 8 (консольное приложение C# .Net8.02)
ASAN показывает утечку памяти через конфигурацию отладки CMAKE, но не показывает утечку памяти через конфигурацию выпуска CMAKE. Почему?
Каковы возможные объекты GDI, которые могут быть обнаружены, но не перечислены как известные типы объектов GDI?
Кадр сопрограммы автоматически уничтожается и освобождается (т.е. освобождается выделенный кадр?) после co_return?
Как исправить IntersectionObserver, вызывающий утечку памяти в моем веб-приложении OpenLayers?