java内存溢出的定位和分析
内存溢出在实际的生产环境中经常会遇到,比如,不断的将数据写入到一个集合中,出现了死循环,读取超大的文件等,都会造成内存溢出。
如果出现了内存溢出,首先我们需要定位到发生内存溢出的环节,并进行分析,是正常情况还是非正常情况,如果是正常的需求,就应该考虑加大内存的设置,如果不是正常的需求,那么就要对代码进行修改,修复这个bug。
1.模拟内存溢出
public class TestJVMOutOfMemory {public static void main(String[] args) {List<Object> list = new ArrayList<>();for (int i = 0; i < 1000000; i++) {StringBuilder str = new StringBuilder();for (int j = 0; j < 1000; j++) {str.append(UUID.randomUUID().toString());}list.add(str.toString());}System.out.println("ok");}
}
设置启动参数以更快的出现问题
-Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError
测试结果如下:
java.lang.OutOfMemoryError: Java heap space Dumping heap to java_pid1102.hprof ... Heap dump file created [7959370 bytes in 0.063 secs] Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOfRange(Arrays.java:3664)at java.lang.String.<init>(String.java:207)at java.lang.StringBuilder.toString(StringBuilder.java:407)at com.yfy.demo01.TestJVMOutOfMemory.main(TestJVMOutOfMemory.java:21)
2.在MAT中进行分析
可以看到,有93.88的内存由Object[]数组占有。这个地方是有可能出现内存溢出的。
点击Details查看详情:
可以看到集合中存储了大量的uuid字符串。
java内存溢出的定位和分析相关推荐
- Java内存溢出OOM使用Mat分析
示例 package com.rumenz;import java.util.ArrayList; import java.util.List;public class OutOfMemory {pu ...
- Java内存溢出OOM之dump分析
目录 内存泄露 内存溢出 1.Java堆内存异常 报错方式 原因 2.Java栈内存异常 报错方式 原因 3.方法区内存异常 报错方式 原因 解决思路 生成dump文件三种方式 dump生成 jvis ...
- java 内存溢出快速定位
背景:线上数据传输功能开启一段时间后就会出现内存溢出 个人理解:内存溢出,说明要不然获取到大量数据导致内存溢出,要不然就是数据无法释放,随着时间堆积越来越多. 日志:查看日志定位是数据传输处的内存溢出 ...
- 【java内存泄漏的定位与分析】
ArrayList就是传说中的动态数组,就是Array的复杂版本,它提供了如下一些好处:动态的 新番茄花园 增加和减少元素.灵活的设置数组的大小-- 认真阅读本文,我相信一定会对你有帮助.比如为什么A ...
- JVM 调优实战--内存溢出的定位和MAT分析
目录 内存溢出的定位和分析 模拟内存溢出代码 MAT分析 内存溢出的定位和分析 模拟内存溢出代码 添加运行参数: ①-Xms8m:初始堆内存大小为8M: ②-Xmx8m:最大堆内存大小为8M: ③He ...
- Java内存溢出分析
内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是可以知道在什么时候或是在什么操作步骤上出现了异常,而且根据堆栈信息也很容易定位到程序中是某处出现了问题.内存溢出与锁表则不然,一 ...
- java内存溢出分析工具:jmap使用实战
java内存溢出分析工具:jmap使用实战 在一次解决系统tomcat老是内存撑到头,然后崩溃的问题时,使用到了jmap. 1 使用命令 在环境是linux+jdk1.5以上,这个工具是自带的,路 ...
- Java内存溢出问题排查分析
目录 前言 一.MAT(Memory Analyzer Tool) 二.软件初识 三.捕获dump文件 1.主动方式 2.被动方式 四.分析dump文件 总结 前言 项目运行过程中,我们可能会遇到Ja ...
- java内存溢出怎么排查_【转】Java学习---内存溢出的排查经历
前言 OutOfMemoryError 问题相信很多朋友都遇到过,相对于常见的业务异常(数组越界.空指针等)来说这类问题是很难定位和解决的. 本文以最近碰到的一次线上内存溢出的定位.解决问题的方式展开 ...
最新文章
- 数据结构与算法:13 字符串与整数集合
- 新造车公司背后的「资本大佬」
- c语言中的tanh函数,tanh()函数,用于C ++中的复数
- linux 启动两个摄像头,Linux:(多摄像头)如何运行指定的摄像头
- mySQL教程 第9章 触发器
- ActivityGroup中的子Activity创建Dialog:android.view.WindowManager$BadTokenException: U
- 分页解决方案 —— GridView + QuickPager + QuickPager_SQL + DataAccessLibrary + 数据库
- 用python画雪花飘落_简单说 JavaScript实现雪花飘落效果
- Netty工作笔记0063---WebSocket长连接开发2
- Web前端面试指导(十七):一个满屏 品 字布局 如何设计?
- linux编译安装rrdtool,Linux下RRDTool安装方法
- 算法: 最大正方形面积221. Maximal Square
- TracePro模拟
- matlab中各种线型-颜色-标记点
- ACM公约数和公倍数
- 题解 P2919 【[USACO08NOV]守护农场Guarding the Farm】
- 100行Python代码,做一个打地鼠小游戏!
- 怎样才能走进区块链行业?
- React报错 Too many re-renders
- 缺少msvc140.dll解决办法,缺少任意dll文件的解决办法