JVM - 基本调优 (2) - 使用JPROFILTER工具

主要是两步完成 一步是IDE的安装

其次在下个JPROFILTER安装包

1 IDE安装

JVM - 基本调优 (2) - 使用JPROFILTER工具_第1张图片

2 重启之后可以看到有一个蓝色小图标在工具栏

3 安装jprfilter工具

   设置里面 设置安装好的路径

JVM - 基本调优 (2) - 使用JPROFILTER工具_第2张图片

准备工作完成之后 我们就可以使用工具来进行排错了

首先先制造一个bug

package com.dong;

import java.util.ArrayList;
//-Xms  设置初始化内存分配大小1/64
// -Xmx 设置最大分配内存 默认1/4
// -XX:+HeapDumpOnOutOfMemoryError
// -XX:+PrintGCDetails //打印gc垃圾回收信息
//-Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError   OOM/dump 可以查找问题所在(栈溢出)
public class Demo03 {
    byte [] array=new byte[1*1024*1024];//1m
    public static void main(String[] args) {
        ArrayList list = new ArrayList<>();
        int count=0;

        try {
            while (true){
                list.add(new Demo03());
                count++;
            }
        } catch (Exception e) {
            System.out.println(count);

        }
    }
}

启动之后他会报错

 

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

at com.dong.Demo03.(Demo03.java:10)

at com.dong.Demo03.main(Demo03.java:17)

 

然后我们在vm option里面设置

JVM - 基本调优 (2) - 使用JPROFILTER工具_第3张图片

-Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryErro

接下来我们要Dump出文件 俗称oom

//-Xms  设置初始化内存分配大小1/64  这里自定义了1m
// -Xmx 设置最大分配内存 默认1/4  这里自定义了8m
// -XX:+HeapDumpOnOutOfMemoryError
// -XX:+PrintGCDetails //打印gc垃圾回收信息
//-Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError   OOM/dump 可以查找问题所在(栈溢出)

 

重新启动可以看到

JVM - 基本调优 (2) - 使用JPROFILTER工具_第4张图片

打开该类 src的上一级目录可以得到一个文件,就是控制台那个文件

JVM - 基本调优 (2) - 使用JPROFILTER工具_第5张图片

然后我们可以使用工具打开这个文件夹

JVM - 基本调优 (2) - 使用JPROFILTER工具_第6张图片

但是我们程序主要是线程在跑

JVM - 基本调优 (2) - 使用JPROFILTER工具_第7张图片

可以看到有个main线程  点击可以看到控制台的错误信息 从而定位哪里出了问题

JVM - 基本调优 (2) - 使用JPROFILTER工具_第8张图片

这样我们就知道是

list.add(new Demo03());

这句代码无限添加引用对象进去栈 从而可以排除问题

 

 

 

你可能感兴趣的:(JVM)