我正在尝试调试一些供应商提供的 JNI/本机代码中的内存泄漏,并且像许多人一样,从这里开始: https ://technology.blog.gov.uk/2015/12/11/using-jemalloc -to-get-to-the-bottom-of-a-memory-leak/
我发现如果我运行:
export MALLOC_CONF=prof:true,lg_prof_interval:30,lg_prof_sample:17
然后运行我的应用程序,然后运行jeprof ...
命令生成 .gif 我可以看到导致泄漏的 JNI 函数名称(这很好!)。
我尝试更改lg_prof_interval:30
为lg_prof_interval:25
更频繁地生成 .heap 文件,但我发现我之前提到的 JNI 函数名称已被地址(0x000123 ...)替换。我没有进行任何其他更改,并进行了双重和三重检查,运行 withlg_prof_interval:30
可以让我看到生成的 .gif 中的函数名称,但lg_prof_interval:25
没有。
我想使用的原因lg_prof_interval:25
是因为我需要使用遭受内存泄漏的应用程序的精简版本重新运行分析,但我担心使用 2^30 字节将永远不会看到 .heap文件。
我已经看到类似的问题,其中答案建议安装 dbg 版本的 jdk,但我很难理解为什么这可能是我的情况的原因。
提前谢谢了。
TLDR:可以看到函数名称lg_prof_interval:30
但不能lg_prof_interval:25