Связать вызовы нативной функции с методом Java - PullRequest
0 голосов
/ 30 апреля 2018

Мы сталкиваемся с собственными проблемами утечки памяти в процессе Java.

После связывания JVM с jemalloc, как рекомендовано в многочисленных ресурсах, таких как (http://www.evanjones.ca/java-native-leak-bug.html),, мы смогли свести основную причину к вызовам inflateInit2_ и updatewindow в библиотеке zlib.

Как мы можем связать эти вызовы из Native space с методами JVM? Мы уже пытались взглянуть на трассировку стека (надеясь получить удачу), а также на графики Flame, но это не сильно помогло.

1 Ответ

0 голосов
/ 01 мая 2018

ZipInputStream / JarInputStream является типичным источником таких утечек памяти, например, когда Class.getResourceAsStream не закрывается после использования.

Создайте дамп кучи, чтобы увидеть, кто содержит java.util.zip.Inflater объектов.


async-profiler недавно получила поддержку для профилирования утечек памяти в Linux. Следующая команда профилирует собственные выделения в течение <SEC> секунд и создает отчет как FlameGraph, содержащий комбинированные Java + собственные стеки:

./profiler.sh -e malloc -d <SEC> -o malloc.svg <PID>
...