惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
大猫的无限游戏
大猫的无限游戏
Microsoft Security Blog
Microsoft Security Blog
C
Check Point Blog
云风的 BLOG
云风的 BLOG
J
Java Code Geeks
阮一峰的网络日志
阮一峰的网络日志
MongoDB | Blog
MongoDB | Blog
Engineering at Meta
Engineering at Meta
H
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
宝玉的分享
宝玉的分享
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
A
About on SuperTechFans
酷 壳 – CoolShell
酷 壳 – CoolShell
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
B
Blog RSS Feed

博客园 - 三国梦回

oracle中date类型在mybatis中查询时遇到的坑 mitmweb在linux上进行反向代理及浏览器中实时查看请求响应 codex对接智谱coding plan,我发现连cc switch也不用了 windows codex更新失败如何处理 windos上codex沙盒报错问题记录 codex windows平台中elevated sandbox机制学习 codex windows平台中unelevated sandbox机制学习 bug排查:nacos做配置管理,给服务返回的配置竟然是错的 windows安装codex desktop和cc-switch,接deepseek v4 flash windows安装ddns-go,上传动态的ipv6到自己的域名 immortalWrt路由器上抓包查看电脑联网如何获取ip 路由器刚刷的immortalWrt系统,我是如何配置ipv6的 路由器刷openwrt之ImmortalWrt过程记录--上 spring boot 项目中oracle datasource设置schema spring cloud项目中,在bootstrap.yml中指定了active的profile,结果不生效 线上服务重启后,从nacos取不到配置了,怎么回事 nginx location没学好,把自己坑了一把 技术问题记录20260125 最近遇到的两个技术问题记录 linux服务器文件上传失败 线上遇到的redis和数据库数据未同步问题、redisson内部实现问题 复杂业务系统线上问题排查过程 nacos中配了一个数字,springboot取回来怎么变了 一个java空指针异常的解决过程 简单记录下最近2个月完成的线上系统迁移工作 centos停服,迁移centos7.3系统到新搭建的openEuler 端口telnet不通排查过程 https证书中的subject alternative name字段作用及如何生成含该字段的证书 linux中如何判断一个rpm是手动安装还是通过yum安装的 对接服务升级后仅支持tls1.2,jdk1.7默认使用tls1.0,导致调用失败
廉颇老矣,装个EclipseMemoryAnalyzer都能卡一小时
三国梦回 · 2026-08-25 · via 博客园 - 三国梦回

背景

大家好,我是逐日。最近运维反馈有个项目的内存有点高,怀疑是不是内存泄漏,我就让他给我dump了一下内存,准备用EclipseMemoryAnalyzer(MAT)分析下。

dump命令: jmap -dump:live,format=b,file=heap.bin 进程pid

mat下载

https://eclipse.dev/mat/download/

我是下载的windows版本。

然后解压即可,注意路径不要有中文和空格。

image-20260825163123325

报错

jdk21安装

image-20260825163221235

由于手里没有多模态模型,只能让豆包协助我了,我其实感觉豆包在多模态这块还不错,平时生活中有个啥搞不懂,拍个图就丢过去了。

豆包先怀疑是不是图里那个jar包不存在,那当然不至于,我甚至发现dbeaver也用了这个jar包:

image-20260825163532020

然后一开始查了下,说新版本的mat要jdk17至少,但我想着再确认下。

用jd-gui.exe反编译了一下,发现有这个Main类:

image-20260825163729396

class字节码的版本是jdk 17,那就至少得jdk17才能打开这个jar包了:

image-20260825163800606

我本地这个新电脑还没jdk17,只有jdk8,那先安装一下。

直接装个jdk21吧:

https://www.oracle.com/java/technologies/javase/jdk21-archive-downloads.html

Windows x64 Installer

image-20260825164015469

修改MAT配置文件,使用jdk21

在网上搜了下怎么改配置,以指定jdk21来打开mat。

然后直接就改了下MemoryAnalyzer.ini,网上答案五花八门,我试了好多种错误方案,如:

image-20260825164900901

还有以下错误答案:

为啥想着加引号,因为路径中间有空格,所以想着加一下:
-vm
"C:/Program Files/Java/jdk-21.0.12/bin/javaw.exe"

-vm
"C:/Program Files/Java/jdk-21.0.12/bin/"

还有windows反斜杠也试了。

结果后来,在cmd中试成功了:

这个可以:
F:\tools\MAT\MemoryAnalyzer-1.17.0.20260601-win32.win32.x86_64>MemoryAnalyzer.exe -vm "C:/Program Files/Java/jdk-21.0.12/bin/"

但我把同样配置弄到配置文件里,还是不行;然后豆包给我说,ini文件里不能用引号,那就这样:

image-20260825165337303

结果还是报错。

豆包又一顿分析,说要不你就是文件的格式是utf8(带了bom),导致这一行格式有问题:

image-20260825165459000

vscode安装Hex Editor插件直接查看二进制

正常来说,在notepad++之类或者vscode里,看到是utf8,可能基本能确定是UTF8还是带bom的utf8.

为了看得清清楚楚,我们可以直接看二进制。

vscode中有个hex editor插件:

image-20260825165808873

文件上右键,

image-20260825165832883

通过前几个字节就能看出来有没有bom:

  • 如果输出开头是 EF BB BF → 存在 UTF‑8 BOM

image-20260825165926456

按理说,我上面那个没bom,结果还是有问题。

豆包又给我分析了下,这次可是真分析到点上了,原来是短横线有点问题:

image-20260825170317624

然后手动重新敲了下短横线。还真的可以了。卧槽...

内存调整

mat需要自己调整下内存,不然dump文件很大就打不开:

image-20260825170740982

总结

刚写文的时候,找到了mat对应的github,发现readme里面就写了要怎么设置vm,结果当时没看到这个页面。折腾半天。

https://github.com/eclipse-mat/mat/wiki/faq

贴一下我这的配置:

-vm
C:/Program Files/Java/jdk-21.0.12/bin/
-startup
plugins/org.eclipse.equinox.launcher_1.7.100.v20251111-0406.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.3.0.v20260203-2149
-vmargs
--add-exports=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
-Xmx2048m

image-20260825170819538