dump解析入门-用VS解析dump文件进行排障
突然有一天部署在服务器的一个应用挂掉了,没办法只能进入服务器打开
【事件查看器】查看下,好不容易找到了打开后一脸懵逼
事件查看器查到的内容根本对我们排障没有任何作用。
在这个时候如果有对应的dump文件就能派上用场了,
只要有dump文件就能查到应用挂掉那刻的一手情报,可能有人认为分析dump文件是非常难的事情,
但是最近不断有新的dump分析工具出来,例如用vs2017就能够很简单的分析dump文件。
接下来我们用几个实际的例子来看看如何用vs2017来分析dump文件吧
dump文件的收集
应用挂是一瞬间的事情,挂了之后就没办法生成dump文件了。所以首先要设置一下自动生成dump文件。
打开注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
在Windows Error Reporting下新建一个 LocalDumps文件夹
然后在这项里面新增 DumpCount DumpFolder DumpType 这三项
演示stackoverflow错误导致的crash
我们有创建一个简单的console程序
class Program
{
static void HogeHoge(string s)
{
HogeHoge(s);
}
static void Main(string[] args)
{
HogeHoge("hoge-");
}
}
编译成exe 后运行 毫无疑问会出现如下错误
查看下dump文件果然生成了
那我们分析下这个dump文件,用VS2017打开它,会出现它的概要信息
你会发现异常信息处写了 【该线程已用完其堆栈】就可以很明显看出来是stackoverflow。
而且看右侧【操作】处 有[使用 仅限托管 进行调试] 和 [使用 混合 进行调试] 和 [使用 仅限本机 进行调试]
这里牵扯出3个名词
托管 ======> 适用于在公共语言运行时下运行的代码 所谓托管是指内存管理由系统而不是由程序员管理 大家都知道c#有关内存都是CLR来管理的
混合 ======>对托管代码和非托管代码都调用调试器
本机 ======>适用于非托管代码
如果你的代码里面没有调用非托管代码的话 点击 前面2个按钮都可以的
点击后会直接进入
这样错误源码级别看的非常清楚了。因为是我们本机创建的工程 pdb 和 源码都有。所以才能直接定位到。但是实际上crash都是发生在服务器上,把服务器上的dump文件打开的话还会是这样吗
下面我们来做一个模拟
用Relase编译 然后把 Program.cs文件也给删除掉。然后重新执行crash生成dump文件
然后用同样的步骤vs打开点击调试就会提示找不到 Program.cs
这样一来可供我们排障的情报就少了很多。在这种情况下 我们可以利用vs 提供的几个窗口来观察
分别是以下三个
第一个窗口:线程窗口
实际的程序往往有很多线程在运行,每个线程的切换等重要信息可以在这个窗口进行观察。
第二个窗口:调用堆栈窗口
调用堆栈窗口是和线程窗口联动的。
第三个窗口也是最重要的窗口:并行堆栈
如图所示,每个线程和它的堆栈内容展示的很清楚。只不过本例子是比较简单的,即使不看这个看前2个窗口就能知道原因了。
但是实际的应用若超过运行上百个线程的话,将这些线程用图形可视化出来对于我们排查复杂问题是非常有用的!
CPU100和死锁导致的crash解析
由于系统可以配置crash自动生成dump文件。但是有些情况比如部署在iis上web服务cpu飙到100%下不来导致为web停止服务。这个时候就需要我们手动提取dump文件了。
下面我们来模拟一下这种场景:
新建一个asp.net mvc程序
以上代码 async/await会造成死锁
我们用iis来启动这个web应用后页面圈圈一直在转网页空白一片
打开Windows任务管理器找到w3wp
用vs打开这个dump文件 点击调试后后
打开并行堆栈这个窗口
大家看会有很多分支,该从哪个开始分析呢,教大家一个小技巧,不知道如何下手的时候就选分支越长的!
从HomeController.Index进来,停止在ManualResetEventSlim.Wait
死锁原因:
总结:
说到dump大家立马可能想到的是windbg
但是windbg的各种命令对于新手们还是比较困难的,Vs工具也能帮助我们分析dump,能够解决的问题也有很多
下一篇文章我将介绍内存泄露dump分析的例子
原文地址: https://www.cnblogs.com/yudongdong/p/9687320.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
dump解析入门-用VS解析dump文件进行排障相关推荐
- swf文件格式解析入门(tag解析)
上文把文件头解析完成了,接下来就是解析标签 swf文件把所有的资源都打包在标签内部 如字体,位图,嵌入的2进制,代码等等 tag有两种类型,1种为短tag,1种为长tag 短tag的长度是小于63个字 ...
- Office 文件解析入门
Office 文件解析入门 概述 - Office 解析相关协议 这里所讲的 Office 文件指的是微软 Office2007 及以后的 PPT/EXCEL/WORD 等文件格式,因为 Office ...
- 解析Caffe框架的prototxt模型文件
文档目录 前言 1. 解析示例 2. 层解析 3. 完整文件 4. caffe模型权重转pytorch模型权重 前言 Caffe全称为Convolutional Architecture for ...
- Linux入门之inode解析及管道重定向
Linux入门之inode解析及管道重定向 inode 简介: 当磁盘分区格式化后会根据分区格式.大小等信息来指定分区分配多少个inode表,每个inode表都会有一个在当前分区中唯一的编号,可能有一 ...
- 让你久等了《开源安全运维平台OSSIM疑难解析--入门篇》正式出版
2019年暑期,众所期待的新书<开源安全运维平台OSSIM疑难解析--入门篇>由人民邮电出版社正式出版发行.此书从立意到付梓,历时超过两年,经过数十次大修,历经曲折与艰辛,希望为大家代奉献 ...
- 让你久等了!《开源安全运维平台OSSIM疑难解析--入门篇》9月上市
2019年暑期,众所期待的新书<开源安全运维平台OSSIM疑难解析--入门篇>开始印刷,9月份即可预售.此书从立意到付梓,历时超过两年,经过数十次大修,历经曲折与艰辛,希望为大家代奉献一本 ...
- Python爬虫入门之爬虫解析提取数据的四种方法
本文主要介绍了Python爬虫入门之爬虫解析提取数据的四种方法,通过具体的内容向大家展现,希望对大家Python爬虫的学习有所帮助. 基础爬虫的固定模式 笔者这里所谈的基础爬虫,指的是不需要处理像异步 ...
- SpringBoot入门-源码解析(雷神)
一.Spring Boot入门 视频学习资料(雷神): https://www.bilibili.com/video/BV19K4y1L7MT?p=1 github: https://github.c ...
- 【AI 绘画】 MidJourney 入门、参数解析、进阶玩法、变现指南、资料包
[AI 绘画] MidJourney 入门.参数解析.进阶玩法.变现指南.资料包|ai绘画|视频文件_网易订阅
最新文章
- 一种使用GDI+对图片尺寸和质量的压缩方法
- AC3 bit allocation
- 【Android 组件化】路由组件 ( 注解处理器参数选项设置 )
- 字节跳动---毕业旅行问题
- 第四十八期:只因写了一段爬虫,公司200多人被抓!
- 支付宝支付-手机浏览器H5支付
- Linux 实操———CentOS 6 安装配置 Tomcat
- 3D LUT Creator Pro for Mac(专业调色软件)中文版
- 实锤了!Chrome存在严重漏洞!
- 计算机机械和设计专业介绍,机械类包括哪些专业
- 基于springboot编写的小程序幸运转盘抽奖功能
- load语句报分区could not be cleaned up
- 爱情就像是免杀,连鞋都没脱,就悄无声息的走进了你的心里
- 解决VirtualBox增强功能异常
- 跑过的城市,走过的路
- 榕树贷款利用AI人工智能技术发送非常迅速(榕树贷款)
- Buffon投针实验 · 数学的直观理解 · 基础知识很重要
- 九章算法笔记D2-坐标型动态规划
- OGNL学习笔记-OGNL基础
- 创建自己的Docker映像(技术提示#57)
热门文章
- javascript权威指南--学习笔记
- Mysql 的子查询
- E-MapReduce上如何升级EMR-Core
- LeetCode 3_Longest Substring Without Repeating Characters
- keepalived 报错 Popt libraries is required
- Devuan Jessie beta 释出
- Codeforces Round #323 (Div. 2) C.GCD Table
- oslo.config资源
- XCode5 真机调试及发布应用
- LDAP启动cacao提示Invalid file permission