dump 内存分析
CPU 及内存占用过大,这也是我们日常调试工作中最常见的两个问题
首先附上两链接
一个样例演示
http://www.cnblogs.com/xioxu/archive/2009/09/04/1560326.html
一点文档信息
http://www.cnblogs.com/kissdodog/p/3731743.html
- 抓取 Dump 文件
可以用工具或系统自带的命令抓取Minidump文件,但是用任务管理器抓取的是FullDump文件比较大,信息比较多,但多余的信息也多 - 使用 Windbg 调试 Dump 文件
(1) 启动 Windbg 打开 Dump 文件 (File -> Open Crash Dump...)
(2) 载入 SOS.dll
--1、元命令loadby加载SOS .net版本相同
0:000> .load sos
0:000> .loadby sos mscorwks
Unable to find module 'mscorwks'
--2、元命令load加载SOS .net版本不相同
如果使用的.Net版本不同,那么还可以手动指定版本,如手动指定载入4.0版本命令:
.load C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/sos.dll
.load C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/sos.dll
如果是64位,那么应该加载如下sos.dll
.load C:/Windows/Microsoft.NET/Framework64/v2.0.50727/sos.dll
.load C:/Windows/Microsoft.NET/Framework64/v2.0.50727/sos.dll
(3) 对于 CPU 占用过高的问题,别忘了 ThreadPool 也可能是造成问题的根源。
0:000> !threadpool
可以看到线程池对cpu的利用率,线程数量,上限
(4) 我们看看是哪个线程占用 CPU 时间过多。
0:000> !runaway
(5) 切换到该线程,查看调用堆栈。
0:000> ~3 s
这里3是要切换的线程id序号在上面runaway里会显示序号
0:003> !clrstack
会显示当前线程托管代码的调用堆栈
(6) 看看这个 "Learn.CUI.Program.b__0()" 的 IL 代码。
0:003> !name2ee * dumptest.Program
name2ee显示指定模块中指定类型或方法的MethodTable结构和EEClass结构,然后就能看到模块或方法表的地址了
(7)导出模块
0:003> !dumpdomain
就可以使用MSIL反汇编器 (Ildasm.exe) 浏览模块或方法表 也可以用Reflector.exe 或者最新流行的ILSpy.exe(推荐)
然后可以查看是否是gc出了问题
大对象堆在进行full gc会耗时比较久
0:003> !eeheap -gc
显示被公共语言运行时内部数据结构使用的进程内存的有关信息
可以发现是否有内存占用比较大的段
(8) 查证这些大户的身份。
0:003> !dumpheap -min 85000 -stat
大于等于85000KB的就是大对象了
然后看是那种类型的大对象造成的
(9) 找出大户的具体内存地址。
0:003> !dumpheap -type Byte[] -min 85000
这里你找出的假设是Byte[]类型
然后会列出这种类型大对象的地址
(10) 挑一个出来,看看谁持有该大户的引用。
0:003> !gcroot 022d3250
显示对在指定地址上的一个对象的引用(或根)信息。
往上接着找找到调用它的根对象或你觉得能看出猫腻的对象
0:003> !do 012d2e2c
然后会列出对象的字段信息,和名字
然后你能根据包含的类型,和根对象的名字,根对象类型取代码里找到可能出问题的地方了。
如果cpu占用率高可以通过前面的!threadpool 或其它方式看到CPU utilization 99%,找到可能出问题的线程在压缩或者计算啥的
ProcInfo [-env] [-time] [-mem]
显示针对该进程的环境变量、内核CPU时间和内存使用统计
另外建议直接使用Jetbrains的dotMemory看内存对象数量泄露等 和 dotTrace工具看哪些东西被调用多少次,占用率等
dump 内存分析的更多相关文章
- java dump 内存分析 elasticsearch Bulk异常引发的Elasticsearch内存泄漏
Bulk异常引发的Elasticsearch内存泄漏 2018年8月24日更新: 今天放出的6.4版修复了这个问题. 前天公司度假部门一个线上ElasticSearch集群发出报警,有Data Nod ...
- 【Android端 APP 内存分析】使用工具进行APP的内存分析
Android端可以通过adb 命令直接获取内存信息,当然Android studio也提供了对内存的监控分析工具,并且后续可以结合MAT做分析 今天介绍的是通过Android studio和MAT工 ...
- 记一次Android内存分析过程
前言 上周五的时候,祝峰找到我,反映了Android收银台买单结果页内存飙升的问题.我在自己的机器上也试着重现了一下,发现从支付台-微信支付成功并返回后,进入买单结果页的内存会突然增大,导致GC,如图 ...
- Android 内存分析工具 MAT(Memory Analyzer Tool)
如果使用DDMS确实发现了我们的程序中存在内存泄漏,那又如何定位到具体出现问题的代码片段,最终找到问题所在呢?如果从头到尾的分析代码逻辑,那肯定 会把人逼疯,特别是在维护别人写的代码的时候.这里介绍一 ...
- Android内存分析工具DDMS heap + MAT 安装和使用
一 Java内存分析工具扫盲 如果像我一样一点都不了解,可以先进行内存分析工具扫盲 MAT介绍: Eclipse Memory Analyzer(MAT)一个功能丰富的 JAVA 堆转储 ...
- 利用MAT玩转JVM内存分析(一)
本文首发于公众号:javaadu 尽管JVM提供了自动内存管理的机制,试图降低程序员的开发门槛,确实也实现了这一目标,在日常开发中,我们一般都不需要关心对象的内存释放.JVM大部分都是使用trace算 ...
- Android内存优化(三)详解内存分析工具MAT
前言 在这个系列的前四篇文章中,我分别介绍了DVM.ART.内存泄漏和内存检测工具的相关知识点,这一篇我们通过一个小例子,来学习如何使用内存分析工具MAT. 1.概述 在进行内存分析时,我们可以使用M ...
- Eclipse MAT内存分析工具(Memory Analyzer Tool)
MAT内存分析工具 MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器.可以用于查找内存泄露以及查看内存消耗情况.MAT是基于Eclipse开发的,是一款免费的性能分 ...
- [转] python运行时内存分析工具meliae
转自:https://my.oschina.net/markco/blog/601773 利用meliae来监控python进程的内存占用情况 meliae是一个python进程内存占用监控.分析工具 ...
随机推荐
- eureka注册中心的使用
1.父pom.xml中引入springcloud依赖 <dependencyManagement> <dependencies> <dependency> < ...
- 25-Object类的使用
1.java.lang.Object类的说明: * 1.Object类是所Java类的根父类 * 2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object ...
- ios_UITextField-修改占位文字和光标的颜色,大小
一.设置占位文字的颜色 方法一:利用富文本 /** 手机号输入框 */ @property (weak, nonatomic) IBOutlet UITextField *phoneTextField ...
- Hexo小技巧(包括如何插入本地图片)
我在研究如何在Hexo中引用本地图片时,看到官方文档对此问题已给出了解决方法,并亲测有效.当然,我并不满足于仅仅知道这一个技巧.在大致阅读过官方文档后,我总结了之前我个人并不知道的几个关于Hexo写博 ...
- 004_自己尝试go语言中的方法
go语言可以给任意类型定义方法,我在学习过程中,一开始一头雾水,但是随着理解的深入,现在也大概知道了什么叫做方法 之前的一些例子其实讲的并不是特别生动,下面我用一个生动的例子演示一下 首先提出需求.我 ...
- 07-NABCD项目分析
时 间:2020.3.31 参加人员:向瑜.赵常恒.刘志霄 讨论记录内容: NABCD模型 ·N(need)-向瑜 你的创意解决了用户的什么需求? 1. 随时随地记录个人收支的明细,清楚明白的知 ...
- JS 鼠标放上去滑出内容案例
.sliderbar { width: 200px; height: 40px; position: relative; margin: 0 auto; } .sliderbar span { dis ...
- SpringBoot介绍,快速入门小例子,目录结构,不同的启动方式,SpringBoot常用注解
SpringBoot介绍 引言 为了使用ssm框架去开发,准备ssm框架的模板配置 为了Spring整合第三方框架,单独的去编写xml文件 导致ssm项目后期xml文件特别多,维护xml文件的成本也是 ...
- IndexFlatL2、IndexIVFFlat、IndexIVFPQ三种索引方式示例
上文针对Faiss安装和一些原理做了简单说明,本文针对标题所列三种索引方式进行编码验证. 首先生成数据集,这里采用100万条数据,每条50维,生成数据做本地化保存,代码如下: import numpy ...
- Java Filter过滤器(拦截路径的配置+拦截方式的配置+生命周期+多个过滤器的先后执行顺序)
Java Filter过滤器+Listen监听器 啥是过滤器 顾名思义即过滤掉一些东西,比如我们经历的高考中考都是过滤器,他过滤掉一些在学习这一方面不是很好的人,而那些成绩好的人则升入高中,大学. 但 ...