# 使用Jvm分析工具

如下场景下,需要对系统进行堆内存dump分析:

  • 系统使用过程中突然出现大面积瘫痪无法使用

如果系统出现大面积瘫痪,可能是内存溢出导致,此时就需要进行堆dump,然后使用MAT工具分析问题堆。

# windows导出线程、堆

上面的场景前提是有系统管理员帐号并且能成功登录查看到线程Thread Dump。如果没有帐号的话,还可以使用jdk自带的一些工具来查看、分析导出线程堆栈。

1)进入协同安装目录jdk\bin,双击启动jvisualvm.exe

1714302955789.png

2)选择要查看的java进程。

选择左侧的一个java进程,点击查看,在右侧可看到java进程在哪个目录下,由此可判断所选择的java进程对应什么服务。

1714302970736.png

3)导出线程dump。

在左侧列表中找到对应的java进程,点击右侧”线程dump”按钮,即可导出线程dump。若要导出协同dump,请在左侧选择对应的tomcat;若要导出office转换服务dump,请在左侧选择com.seeyon.v3x.rmi.server.Server。

1714302984245.png

4)保存线程dump文件。

1714303011126.png

5)保存堆dump。

点击”堆Dump”按钮后,左侧列表中可以看到生成了heapdump节点,选中生成的heapdump节点,右击选择另存为。


# Linux导出线程、堆

# jstack导出线程堆栈

用法: jdk的bin目录路径下执行:

jstack -l 2073 >./example.dump

2073代表进程id(查java进程 ps -ef | grep java)

./example.dump代表将线程堆栈导出到哪个路径中的哪个文件中,文件名可以自定义。

# jmap导出内存

用法: jdk的bin目录路径下执行:

jmap -dump:format=b,file=./example.hprof 2073

2073代表进程id(查java进程 ps -ef | grep java)

example.hprof代表将内存堆导出到哪个路径中的哪个文件中,文件名可以自定义。

分析hprof内存堆文件:使用mat工具,前提是分析内存的电脑内存要足够大,否则无法解析hprof

创建人:het
修改人:het