java - 将本机函数调用关联到 Java 方法
问题描述
我们遇到了 Java 进程的本机内存泄漏问题。
在按照许多资源(如(http://www.evanjones.ca/java-native-leak-bug.html)的建议将 JVM 与 jemalloc 链接后,我们能够将根本原因归结为 zlib 中的 inflateInit2_ 和 updatewindow 调用图书馆。
我们如何将这些来自 Native 空间的调用关联到 JVM 方法?我们已经尝试查看堆栈跟踪(希望幸运)和火焰图,但这些并没有太大帮助。
解决方案
ZipInputStream
/JarInputStream
是此类内存泄漏的典型来源,例如,当 aClass.getResourceAsStream
使用后未关闭时。
创建堆转储以查看谁持有java.util.zip.Inflater
对象。
async-profiler
最近获得了对在 Linux 上分析本机内存泄漏的支持。以下命令将在<SEC>
几秒钟内分析原生分配,并创建一个包含组合 Java+原生堆栈的 FlameGraph 报告:
./profiler.sh -e malloc -d <SEC> -o malloc.svg <PID>
推荐阅读
- javascript - 显示照片
- python - 在 Python 中调用具有可变数量的关键字参数的函数
- wifi - wl18xx 模块在使用 Linux 4.19.33 + Xenomai 3.1 的 imx6q 上挂起
- python - 有没有办法在不知道数据位置的情况下从 DataFrame 中搜索数据?
- javascript - Javascript chrome扩展没有点击带有click()的按钮
- ios - Xcode 13 doesn't show quick help when option click user defined property, function, etc
- abap - 根据最新记录过滤掉z表内的记录
- postgresql - 默认 Postgres 为 14,数据库文件为 v12
- html - 使用 npm 时,字体真棒图标未在 netlify 上加载
- url - Sitemap.xml、Google Search Console 中的 URL 无效