Java如何进行heap dump堆栈信息

作为Java程序员能够实时获取到线上服务堆栈信息是一个非常重要的技能,也可以极大帮助我们定位线上问题以及发现服务中的隐藏故障。

dump服务的堆栈信息主要有两种渠道,分别是自动生成dump文件和手动生成dump文件。

一、自动生成dump文件

顾名思义,当程序中出现内存溢出或者gc的时候系统会自动dump出堆栈信息到指定路径文件中。

为了实现上述功能需要在jvm启动参数中添加如下的配置

1. -XX:+HeapDumpOnOutOfMemoryError

当OutOfMemoryError发生时自动生成 Heap Dump 文件。

当你需要分析Java内存使用情况时,往往是在OOM(OutOfMemoryError)发生时。

2. -XX:+HeapDumpBeforeFullGC

当 JVM 执行 FullGC 前执行 dump。

3. -XX:+HeapDumpAfterFullGC

当 JVM 执行 FullGC 后执行 dump。

4. -XX:+HeapDumpOnCtrlBreak

交互式获取dump。在控制台按下快捷键Ctrl + Break时,JVM就会转存一下堆快照。

5. -XX:HeapDumpPath=/opt/logs/dumplogs

指定 dump 文件的存储路径

二、手动生成dump文件

主要的步骤如下:

1.登录上有问题的机器并获取到相应的root权限。

2.通过top指令知道需要dump的java进程

3.开始dump文件。命令:jmap -dump:file=文件名.hprof,format=b pid(进程号) 例如:jmap -dump:format=b,file=202104012.hprof 6666

使用自动和手动dump文件的方式会把dump的文件存储到对应的服务中需要将文件下载到本地进行分析

三、copy dump文件到本地

1.登录自己的dump文件的服务器,执行 sftp [email protected],成功后执行命令 put 202104012.hprof(dump文件名) 传输文件。

2.文件传输完成后在本地shell 输入命令 sftp [email protected],命令成功后执行get 202104012.hprof(dump文件名) 拉取文件到本地。

  拉取文件时需要主要执行命令的路径是存储文件的位置。

dump文件到本地以后就可以使用mat、Jprofile、visualVM等工具进行分析dump文件了。

最后:打一个小广告,后续的文章会在微信公众号“程序员之家QAQ”推送,欢迎大家搜索关注~~

你可能感兴趣的:(Java如何进行heap dump堆栈信息)