实操---->创建一个OOM或者FullGC,生成jvm的dump文件,通过jvisualvm工具或者MAT工具解析

目录

一 、如何制造OOM?

二、操作部分:

三、使用MAT工具


打印日志---->获取dump文件---->MAT分析---->修改验证

一 、如何制造OOM?

这里采用的方法是不断创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清理这些对象,就会在对象数量达到最大堆容量限制后产生OOM

public class GcDemo {
    static class OOMObject{

    }

    public static void main(String[] args) {
        List<OOMObject> list = new ArrayList<>();
        while(true){
            list.add(new OOMObject());
        }
    }
}

二、操作部分:

  1. 设置jvm运行参数,目的是让jvm发生OOM时生成jump文件(文件后缀是.hprof)
  2. 项目发送OOM时,会在日志提示错误信息并打印dump文件名称
  3. 使用jdk自带工具jvisualvm来解析dump文件从而修改验证

使用jvisualvm来分析dump文件:

jvisualvm是JDK自带的Java性能分析工具,在JDK的bin目录下,文件名就叫jvisualvm.exe。

jvisualvm可以监控本地、远程的java进程,实时查看进程的cpu、堆、线程等参数,对java进程生成dump文件,并对dump文件进行分析。

像我这种从服务器上dump下来文件也可以直接扔给jvisualvm来分析。

使用方式:直接双击打开jvisualvm.exe,点击文件->装入,在文件类型那一栏选择堆,选择要分析的dump文件,打开。

jvm参数设置参考:

-XX:+PrintGCDetails
-XX:+UseConcMarkSweepGC
-Xmx20m
-Xms20m
-XX:+HeapDumpOnOutOfMemoryError
-XX:+HeapDumpBeforeFullGC
-XX:+HeapDumpAfterFullGC
-XX:HeapDumpPath:自己的存储路径

* 在idea中打开项目的根目录

 

* 项目发生OOM之后,控制台的日志和出现在根目录下的dump文件 

 

 * 找到jdk的bin目录下的jvisualvm,载入dump文件

 

* 其他:如何找到jdk安装路径?
可以在idea的配置找,或者查看下电脑的环境变量当时是怎么配置的java环境变量的

 

 

三、使用MAT工具

我直接给了软件解压就行  :

链接:https://pan.baidu.com/s/1RsiaSdzMVIdMxoTQyDnk-Q 
提取码:yyds

 点击那个MemoryAnalyzer.exe启动MAT

导入后,强出上面的对话框:
Leak Suspects Report: 漏洞疑点报告,自动检查堆转储是否存在泄漏嫌疑,报告哪些对象被保存起来,为什么它们没有被垃圾收集;
Component Report: 元件报告,分析一组对象是否存在可疑的内存问题:重复的字符串、空集合、终结器、弱引用等
Re-open previously run reports: 打开以前的运行报告;

选择Leak Suspects Report,点击完成

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值