博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM遇到OOM如何排错,如何使用工具分析问题所在,这篇文章告诉你!
阅读量:3947 次
发布时间:2019-05-24

本文共 1685 字,大约阅读时间需要 5 分钟。

本篇文章只讲述在遇到 OOM (java.lang.OutOfMemoryError:Java heap space) 这种情况如何利用工具分析问题,找到问题所在,关于JVM原理这方面的不过多深究。大家有兴趣的可以自行百度

本篇参考:狂神说 Java

文章目录

步骤一:准备一个简单的案例

首先,我们准备一个会触发 OOM 内存移除的小案例,代码如下:

package org.javaboy.test;import java.util.ArrayList;import java.util.List;/** * todo 要设置的 JVM 参数 -Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError * @Author: bai * @DateTime: 2020/7/4 19:38 */public class TestDemo3 {
byte[] array = new byte[1 * 1024 * 1024]; public static void main(String[] args) {
List
list = new ArrayList
(); int count = 0; try {
while (true) {
// 不停的 new 对象,大规律会触发 OOM 堆溢出问题 list.add(new TestDemo3()); count++; } } catch (Error e) {
System.out.println(count); e.printStackTrace(); } }}

步骤二:下载 jprofiler 分析工具

官网地址:

下载步骤就不 BB 了,傻瓜式操作,相信听说过 JVM 的小伙伴(夸你们已经是一个合格的程序员了),百度下载软件对你们来说都是小意思。
在这里插入图片描述

第三步:IDEA 插件安装

本案例 Demo 是运行在 idea 上的,使用 jprofiler 分析工具前提,idea 也需要安装相应的插件,如下所示:

在这里插入图片描述
第二步设置 JProfiler 的位置,如下图所示:
在这里插入图片描述

第四步:运行代码(设置 JVM 运行参数)

运行本案例之前,需要设置一些 JVM 的参数,命令如下:

-Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError

在这里插入图片描述

在这里插入图片描述

步骤五:JProfile 分析 Dump 文件

经过上面的 JVM 参数设置,然后生成如下文件,我们直接双击打开。

在这里插入图片描述

1. JProfiler(Biggest Objects 界面)

通过 Biggest Objects 界面,我们可以很直观的看到到底是因为什么产生的内存溢出,很明显,这么长长的一串红颜色,想不注意都难啊。

在这里插入图片描述

2. JProfiler(Thread Dump 界面)

通过这里可以直观的找到我们程序出错的位置,没错就是在 21 行。就是在这行,我们不停的在 new 对象,所以产生的内存溢出问题。

在这里插入图片描述

总结

通过一个简单的小案例,学习了一些分析工具,对于生产环境遇到 OOM 异常,我们就可以通过这样的工具来分析问题所在,通过设置一些基本的 JVM 参数来得到 Dump 文件,然后通过工具分析错误位置,这样我们就可以知道什么原因造成的错误,最后,给大家总结了几条常用的 JVM 参数,请笑纳。

-Xms 设置初始化内存分配大小 默认占比系统的 64/1-Xmx 设置最大分配内存   默认占比系统的 4/1-XX:+PrintGCDetails 打印GC垃圾回收信息-XX:+HeapDumpOnOutOfMemoryError OOM Dump 文件

转载地址:http://mvqwi.baihongyu.com/

你可能感兴趣的文章
不插SIM卡,不能拨打紧急电话
查看>>
COSMOS上实现IP DIAL功能
查看>>
什么话不可以和上司讲
查看>>
请学会淘汰你的上司
查看>>
以人为本
查看>>
全球分布式创新:企业致胜的关键
查看>>
上司最恨员工哪十大"罪行"
查看>>
和上司沟通必备8个黄金句
查看>>
竹笋和榕树的管理学
查看>>
让“抱怨”促进公司进步
查看>>
职场“站队”你站对了吗?
查看>>
培养员工能力与责任
查看>>
细分市场制胜
查看>>
空降兵变革是怎样失败的
查看>>
伟大决策的6大基石
查看>>
MTK编译笔记
查看>>
深入理解各种指针
查看>>
Android的SeekBar
查看>>
SMS 和 MMS 在输入字母的响应不一致
查看>>
如何判断手机是否处于漫游状态?
查看>>