要定位问题,首先你需要把服务器的内存镜像dump成文件。jdk自带的
jmap命令可以完成这个工作
:
$JAVA_HOME/bin/
jmap-heap:format=b <进程号>
然后你可以祈祷命令能够执行成功吧!以我的经验,成功率不是太高......
如果成功执行了
jmap,会在当前目录生成一个heap.bin文件,就是当前进程内存的完整影像,把它打包下载下来就可以用Eclipse MAT来分析了。
Eclipse MAT是SAP公司贡献的一个工具,可以在Eclipse网站下载到它,完全免费的。它可比Sun提供的内存镜像分析工具jhat要强太多了。用它打开先前生成的heap.bin文件,就可以看到占用内存的到底是什么东西了。