栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mat分析线上heap dump文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mat分析线上heap dump文件

mat分析线上heap dump文件 1. 发现问题
(1) 某次线上服务3台机器全部宕机,查看日志及监控发现,oom异常
(2) 赶紧登录服务器,做了一次线上heap dump 操作,保留快照文件,以便后续分析问题
	① 进入docker容器,docker exec -it xxxx sh
	② 执行jps,查看服务进程 jps, 
	③ 开始做dump文件: jmap -dump:format=b,file=heap.2021-12-28.hprof  
	④ 至此,线上快照完毕,导出到本地机器,准备做分析使用
2. 排查过程
1) 我采用的是memory analyzer 分析工具,功能很强大.
	① mat下载工具: http://www.eclipse.org/downloads/download.php?file=/mat/1.12.0/rcp/MemoryAnalyzer-1.12.0.20210602-macosx.cocoa.x86_64.dmg
	② 我用的是高版本,需要jdk11及以上,顺便我将电脑的jdk1.8 升级到了11,
	③ 工具准备就绪,可以开始分析了. 
2)  打开mat分析工具
	①  菜单栏选择,File -> open File  选择要分析的hprof文件.
	②  打开分析文件的时候,一定要选择上leak suspects report 功能,这个功能有助于协助分析问题点所在,对我们是个很好的提示


③ 可以看到报告,显示 org.apache.coyote.http11.Http11OutputBuffer 占用了大量的内存空间,猜测是不这个类做了啥操作?

  1. 点击dominator tree 查看任务依赖树,发现都是一些接口调用记录.
  2. 发现单个对象的大小都为10M,猜测?是不应用哪个地方加了配置,给http请求设置了内存预分配
  3. 百度,发现 跟application.yml 配置中 max-http-header-size: 10000000 设置有关,果断去掉此配置,重新弄部署上线,运行正常,监控应用老年代内存一直处于正常状态.
3. mat工具常用功能


1) 查看对象实例数及内存容量占比.
2) 查看依赖树.
3) 查看对象堆栈信息.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/686343.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号