【JVM】使用JProfiler工具分析OOM原因

目录

参考文章

安装与配置

为什么要使用内存快照分析工具

使用教程

分析Dump文件


参考文章

long_24k_os的博客_八宝粥大朋友_CSDN博客-layui,mysql,java领域博主JProfiler的安装和使用_vicky_pyh的博客-CSDN博客_jprofilerlong_24k_os的博客_八宝粥大朋友_CSDN博客-layui,mysql,java领域博主

安装与配置

首先进入Jpofiler官网 下载安装包后安装

安装后输入许可证和密钥——节选自这位朋友

在IDEA中安装Jprofiler插件

 安装并配置安装好的Jprofiler文件

安装成功会出现

为什么要使用内存快照分析工具

 如果在一个项目中,出现了OOM故障,该如何定位错误、排除并研究为什么出错呢

        使用内存快照分析工具        MAT(Eclipse继承)        Jprofiler

Jprofiler、MAT作用

        1.分析dump内存文件,快速定位内存泄漏位置

        2.获取堆中数据

        3.获得很大的对象

使用教程

public class Main {
    public static void main(String[] args) {
        //jvm虚拟机试图调用的最大内存
        long maxMemory = Runtime.getRuntime().maxMemory();
        //返回jvm的总内存
        long totalMemory = Runtime.getRuntime().totalMemory();
        System.out.println("maxMemory字节为:"+maxMemory+"     内存为:"+maxMemory/1024*1.0/1024*1.0+"M");
        System.out.println("totalMemory字节为:"+totalMemory+"     内存为:"+totalMemory/1024*1.0/1024*1.0+"M");

        String str="123";
        while(true){
            str+=new Random().nextInt(12345678)+new Random().nextInt(999999999)+new Random().nextInt(999999999);
        }
    }
}

当我们运行一段会内存超限的信息,我们并不能知道每个对象占用了多少内存,具体是那些地方导致了内存超限

        我们可以手动生成jvm内存快照dump文件,然后通过内存快照分析文件Profiler来对dump文件进行分析

        具体的生成方式为向VM配置参数

-Xms1m -Xmx1m -XX:+HeapDumpOnOutOfMemoryError

        其中-XX:+HeapDumpOnOutOfMemoryError的意思为,当出现OOM错误时,生成Dump文件

        再次运行程序,我们可以看到dump文件已经生成,名称为java_pid3608.hprof

         我们在程序目录文件中就可以找到对应的文件了

 双击可以通过Jprofiler打开

分析Dump文件

参考文章JProfiler的安装和使用_vicky_pyh的博客-CSDN博客_jprofiler

系统中出现OOM通常是一下几种原因

        1.频繁创建Java对象

        2.存在大对象

        3.存在内存泄漏

对于1、2中情况可以通过当前对象集分析

其中实例计数时代表类被实例的次数(new的次数),内存占用大小为这个类当前占用内存的大小

        当对象被实例的次数很多时,说明对象一直再被创建

        当对象被实例的次数不多但是占用内存特别大时,说明对象是大对象

在线程转储中选择main线程,可以准确定位错误

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值