Eclipse MAT无法识别本地运行VM进程问题求助
Troubleshooting Eclipse MAT Not Detecting Running Java VM Processes
我之前排查Swing程序内存泄漏时也碰到过一模一样的问题——明明程序在Eclipse里跑着,MAT就是搜不到任何运行进程,哪怕配置了HPROF的-jdkhome参数也没效果。结合你的情况,给你几个实际有效的排查方向:
先确认位数兼容性
这是最容易踩的坑:如果你的Eclipse/MAT是32位版本,但运行程序用的是64位JDK(或者反过来),MAT根本识别不到进程。你可以快速验证:- 打开Eclipse,通过
Help > About Eclipse IDE查看自身位数(一般会标注x86_32或x86_64) - 打开命令行敲
java -version,看输出里的VM位数(比如64-Bit Server VM)
必须保证两者位数完全一致,不然要么换对应位数的MAT/Eclipse,要么切换到匹配的JDK来运行你的Swing程序。
- 打开Eclipse,通过
强制指定程序运行的JDK
虽然你的JRE是JDK自带的,但Eclipse默认的运行环境可能没指向正确的JDK根目录。你可以手动绑定:- 右键你的Swing项目,选择
Run As > Run Configurations - 切到
JRE标签页,选Alternate JRE,然后点击Installed JREs添加你的JDK根目录(比如C:\Program Files\Java\jdk1.8.0_301)
确认后重启程序,再回到MAT试一次获取堆转储。
- 右键你的Swing项目,选择
绕开进程检测,手动生成堆转储
如果上面的方法都不管用,咱们换个思路:不用MAT自动抓进程,手动用jmap生成堆转储再导入MAT:- 打开命令行,输入
jps -l找到你的Swing程序的进程ID(PID) - 执行命令:
jmap -dump:format=b,file=heapdump.hprof <PID>(把<PID>换成你查到的进程号) - 打开MAT,通过
File > Open Heap Dump选择刚才生成的heapdump.hprof文件,就能正常分析了。
- 打开命令行,输入
检查HPROF配置的细节
再仔细核对一下你配置的-jdkhome参数:- 打开MAT,进入
Window > Preferences > Memory Analyzer > Acquire Heap Dump - 选中
HPROF jmap dump provider,查看VM arguments里的-jdkhome路径是不是JDK的根目录(比如-jdkhome:C:\Program Files\Java\jdk1.8.0_301)
注意路径里如果有空格,要么用引号包裹(比如-jdkhome:"C:\Program Files\Java\jdk1.8.0_301"),要么换成短路径;另外要确保这个JDK和你运行Swing程序的JDK是同一个版本。
- 打开MAT,进入
内容的提问来源于stack exchange,提问作者RhetoricalQuestions
相关产品推荐
相关产品推荐

