JVM(4)之 使用MAT排查堆溢出
为什么80%的码农都做不了架构师?>>>
接下来讲解如何设置以及当发生堆溢出的时候怎么排查问题。先看一小段代码:
代码中使用了一个无限循环来为list添加对象,如果采用默认的堆大小的话可能要等待好久才能出现堆溢出的错误,因此我们要将其设置小一点:
-Xms10m -Xmx10m -XX:+HeapDumpOnOutOfMemoryError,elipse中的设置方法我们在第一章讲过了,这里不多说啦。-Xms10m,意思就是堆的最小内存为10m。同理-Xmx10m的意思就是最大内存也为10m。这两个都是设置为10m,那么堆的大小就是10m。而-XX:+HeapDumpOnOutOfMemoryError指的是当发生内存溢出的时候会将当前的内存使用情况生成一个快照保存起来,但需要eclipse下载一个MAT的插件,下载方式度娘到处都是。
使用刚刚设置的参数启动程序,稍等一小会就会出现以下错误:
显示出堆溢出错误,并且生成了一个叫做java_pid4792.hprof的文件,我们刷新项目便可以看到该文件,双击打开,需要一段的加载时间。
首先可以看到的是一个饼状图,占用部分最大的便是发生溢出错误的部分,我们接着往下看 :
我们这里看看画红线的部分,这里列出一些存活的大对象,在溢出的时候一般先怀疑大对象,我们点进去:
这里列出占用内存最大的几个对象,很显然,第一个很可疑,占用率达到了94.64%!继续跟进:
发现都是test对象,因此排查的时候可以从这个方面下手。接着我们右键该对象选择Path To GC Root(在引用链上的路径),再选择exclue all phantom/weak/soft etc. reference ,结果如图:
可以看到他是被List引用了,因此一直在引用链上,导致无法被回收掉,也就出现了内存溢出。
转载于:https://my.oschina.net/itommy/blog/1576134
JVM(4)之 使用MAT排查堆溢出相关推荐
- 无线循环里面 string = “i”会内存溢出吗?_记一次公司JVM堆溢出抽茧剥丝定位的过程...
背景 公司线上有个tomcat服务,里面合并部署了大概8个微服务,之所以没有像其他微服务那样单独部署,其目的是为了节约服务器资源,况且这8个服务是属于边缘服务,并发不高,就算宕机也不会影响核心业务. ...
- java内存溢出模拟_模拟实战排查堆内存溢出(java.lang.OutOfMemoryError: Java heap space)问题...
前言: 模拟实战中排查堆内存溢出(java.lang.OutOfMemoryError: Java heap space)的问题. 堆内存溢出的原因:一般都是创建了大量的对象,这些对象一直被引用着,无 ...
- 什么情况下java会出现堆溢出_【Java面试题第三期】JVM中哪些地方会出现内存溢出?出现的原因是什么?...
内存溢出(Out Of Memory)经常简称为OOM,在jvm中主要分为方法区.堆.栈.本地方法栈.程序计数器这几部分,其中程序计数器是唯一不会出现OOM的,也就是说其他区域都会出现OOM.下面来分 ...
- jvm堆溢出和栈溢出
jvm堆溢出和栈溢出 一.jvm堆溢出 1.介绍 在jvm运行java程序时,如果程序运行所需要的内存大于系统的堆最大内存(-Xmx),就会出现堆溢出问题. 2.案例 // 介绍:执行该段代码需要大于 ...
- 五种内存溢出案例总结:涵盖栈深度溢出、永久代内存溢出、本地方法栈溢出、JVM栈内存溢出和堆溢出
大家好,我是冰河~~ 相信小伙伴们在平时工作的过程中,或多或少都会遇到一个场景:内存溢出.如果你没有遇到过这个场景,那就说明你是个假的程序员.哈哈,开个玩笑,平时工作过程中,我们确实会遇到这个问题.今 ...
- java上传文件堆溢出,JVM【第五回】:【OutOfMemoryError异常之Java堆溢出】
Java堆用于存储对象实例,我们只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清楚这些对象,就会在对象数量到达最大堆的容量限制后产生内存溢出异常. 代码清单中限制J ...
- MAT 分析堆内存快照
MAT 是基于 Eclipse 开发的 Java 堆内存快照分析工具. 下载地址: https://www.eclipse.org/mat/downloads.php 如果你分析的堆内存快照文件比较大 ...
- arthas 排查内存溢出_小学妹问我:如何利用可视化工具排查问题?
有关JVM问题排查的可视化工具有很多,比如说JDK自带的jconsole.jvsualvm等,第三方有MAT.GChisto.GCView等. jconsole查看内存回收情况 jconsole工具在 ...
- jmap+MAT实战内存溢出
一.堆区和非堆区 前言: 如果发生内存溢出,主要是通过内存映像文件,来查看到底是那些类,一直在占有没有释放. 1.1 情况分析: 第一种内存溢出:有可能内存泄漏 第二种内存溢出:也有可能内存分配不足导 ...
最新文章
- 【Android 界面效果49】RecyclerView高度随Item自适应
- 美国伊利诺伊大学香槟分校计算机专业,伊利诺伊大学香槟分校计算机科学排名第7(2020年TFE美国排名)...
- linux安装spec编译器,RPM包制作之Spec文件参数详解
- JavaScript 运行机制详解(理解同步、异步和事件循环)
- Chrome浏览器获取XPATH的方法----通过开发者工具获取
- 专家论道,把脉数据库技术发展新方向
- ipc (进程间通信
- 学习Python语言的优势
- java关键字false_无聊,null,true,false是java关键字吗
- 动感标题文字快闪(闪白特效)开场PR模板MOGRT
- 自动化专业好找工作吗?就业方向是什么?
- python如何计算等额本息还款_银行等额本息还款算法
- 一般描绘性形容词_英语中描绘性形容词是指哪种形容词?
- 高通功耗调试17之TLOC DEAMON导致待机/亮屏电流异常问题
- Euresys eVision 加载和保存图像
- Java实现 LeetCode 756 金字塔转换矩阵(DFS)
- 基因家族分析③:linux下hmmer的安装与使用
- oracle索引查询
- Codewars(3)
- 上海交通大学python实验七答案_20192310 实验八《数据结构与面向对象程序设计》实验报告...
热门文章
- win10兼容模式怎么设置_win10护眼模式关不掉怎么办
- Object 及toString() 方法的重写
- windows下手动安装composer
- here文档 here doc EOF重定向
- iOS WebView 加载本地资源(图片,文件等)
- 一、后台首页index.php【dedecms后台源码分析】
- WAP开发笔记(1)-.net移动页面中html控件不能直接显示的解决
- DataList用法
- javaScript第六天(1)
- 关于Unity中NGUI的背包实现之Scrollview(基于Camera)