将本机函数调用关联到 Java 方法

Associate a Native Function calls to Java Method

我们 运行 遇到 Java 进程的本机内存泄漏问题。

按照 (http://www.evanjones.ca/java-native-leak-bug.html) 等众多资源中的建议将 JVM 与 jemalloc 链接后,我们能够将根本原因归结为 zlib 库中的 inflateInit2_ 和 updatewindow 调用。

我们如何将这些来自本机 space 的调用关联到 JVM 方法?我们已经尝试查看堆栈跟踪(希望幸运)和火焰图,但这些并没有多大帮助。

ZipInputStream / JarInputStream 是此类内存泄漏的典型来源,例如,当 Class.getResourceAsStream 在使用后未关闭时。

创建堆转储以查看谁拥有 java.util.zip.Inflater 个对象。


async-profiler 最近在 Linux 上获得了对分析本机内存泄漏的支持。以下命令将分析本机分配 <SEC> 秒,并创建一个包含组合 Java+本机堆栈的 FlameGraph 报告:

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