当前位置: 首页 > news >正文

jvm oom内存溢出,导出dump,使用mat进行问题分析

文章目录

  • 前言
    • 1.生成Dump文件
      • 1.1 让JVM在遇到OOM(OutOfMemoryError)时生成Dump文件
      • 1.2 在服务僵死时,jmap导出
    • 2. 分析dump文件(使用eclipse的mat图形化工具)
      • 2.1 下载windows版本,直接打开(若dump文件很小)
      • 2.2 下载linux版本,上传到服务器后解压(若dump文件很大)
    • 3. 打开分析报告
      • 3.1 使用浏览器浏览
      • 3.2 使用eclipse的mat工具

前言

当需要的内存空间大于系统分配的内存空间时,发生OOM;客户线上环境基本每2周挂一次,暂时编写了脚本自启动应用,需要去定位原因


1.生成Dump文件

1.1 让JVM在遇到OOM(OutOfMemoryError)时生成Dump文件

在应用中添加JVM参数:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/log/sdc

1.2 在服务僵死时,jmap导出

执行jmap -dump:format=b,file=文件名 进程对应的pid

如:

jmap -dump:format=b,file=sdc.hprof 124108

在这里插入图片描述

file:保存路径及文件名
pid:进程编号(linux通过ps aux查看)


2. 分析dump文件(使用eclipse的mat图形化工具)

mat工具下载
在这里插入图片描述
注: 生成环境使用的版本为jdk8,最新的mat不支持,需要用 之前发行的版本,使用1.11.0版本
在这里插入图片描述

2.1 下载windows版本,直接打开(若dump文件很小)

2.2 下载linux版本,上传到服务器后解压(若dump文件很大)

进入解压后的mat目录,查看所有文件:

在这里插入图片描述
编辑MemoryAnalyzer.ini,调大最大使用内存
在这里插入图片描述

配置完成后,在服务中分析dump文件./ParseHeapDump.sh dump文件路径 org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components

./ParseHeapDump.sh /data/log/sdc/sdc.hprof org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components

在dump文件所在的路径下生成报告文件
在这里插入图片描述

把报告文件拷贝到本地磁盘
在这里插入图片描述


3. 打开分析报告

3.1 使用浏览器浏览

解压缩以.zip结尾的文件,解压后,使用浏览器打开index.html文件内容,查看分析报告

查看内存泄漏排查: 查看对象占据内存空间的比例
在这里插入图片描述

查看线程
在这里插入图片描述

3.2 使用eclipse的mat工具


相关文章:

  • 百钱百鸡问题(C++枚举法)
  • 基于SSM实现智慧幼儿园信息管理系统
  • 九月组队学习计划!
  • OJ在线编程输入输出(Java版)
  • Matlab代码批处理中国地面气象日值数据集(2400站点数据集),提取所需省份全部站点数据
  • 链表之头指针、头结点、首元结点、空链表
  • 【Linux】静态库与共享库
  • POI入门
  • 07- 诊断事件diagnostic events的类图关系
  • 【C#】RestSharp踩坑日记
  • 自学5个月软件测试找到一个8k的工作,我的学习方式值得你借鉴
  • 【JavaEE初阶】文件操作 和 IO (下篇)
  • Nebula Studio:部署与连接
  • Redis 学习笔记
  • 萤火虫(FA)算法(附完整Matlab代码,可直接复制)
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • CentOS7 安装JDK
  • golang 发送GET和POST示例
  • JavaScript服务器推送技术之 WebSocket
  • Java精华积累:初学者都应该搞懂的问题
  • java取消线程实例
  • PhantomJS 安装
  • scrapy学习之路4(itemloder的使用)
  • use Google search engine
  • vagrant 添加本地 box 安装 laravel homestead
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vue的全局变量和全局拦截请求器
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 动态魔术使用DBMS_SQL
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 诡异!React stopPropagation失灵
  • 浏览器缓存机制分析
  • 前端攻城师
  • 如何用vue打造一个移动端音乐播放器
  • 使用common-codec进行md5加密
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 在Unity中实现一个简单的消息管理器
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​ubuntu下安装kvm虚拟机
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • $$$$GB2312-80区位编码表$$$$
  • (003)SlickEdit Unity的补全
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (MATLAB)第五章-矩阵运算
  • (二)JAVA使用POI操作excel
  • (二)学习JVM —— 垃圾回收机制
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354