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程序
public class HomeController : Controller
{
async Task<string> GetAsync()
{
var str = await new HttpClient().GetStringAsync("http://www.baidu.com/");
return str;
} public ActionResult Index()
{
var s = GetAsync().Result;
return View();
}
}
以上代码 async/await会造成死锁
我们用iis来启动这个web应用后页面圈圈一直在转网页空白一片
打开Windows任务管理器找到w3wp


用vs打开这个dump文件 点击调试后后
打开并行堆栈这个窗口

大家看会有很多分支,该从哪个开始分析呢,教大家一个小技巧,不知道如何下手的时候就选分支越长的!

从HomeController.Index进来,停止在ManualResetEventSlim.Wait
死锁原因:

总结:
说到dump大家立马可能想到的是windbg
但是windbg的各种命令对于新手们还是比较困难的,Vs工具也能帮助我们分析dump,能够解决的问题也有很多
下一篇文章我将介绍内存泄露dump分析的例子
dump解析入门-用VS解析dump文件进行排障的更多相关文章
- jacob使用入门及问题解析
转自:http://blog.csdn.net/hemingwang0902/article/details/4377994 本博客 jacob 列文章导读Java操作Microsoft Word之j ...
- javaweb入门20160305---xml的解析入门
一个XML文件除了我们人去读写以外,我们希望可以通过程序去读写,利用程序去增删改查XML的过程就是XML编程 CRUD:Create.Read.Update.Delete XML的两种解析方式 d ...
- C语言文件操作解析(五)之EOF解析(转载)
C语言文件操作解析(五)之EOF解析 在C语言中,有个符号大家都应该很熟悉,那就是EOF(End of File),即文件结束符.但是很多时候对这个理解并不是很清楚,导致在写代码的时候经常出错,特 ...
- 用java实现一个简易编译器1-词法解析入门
本文对应代码下载地址为: http://download.csdn.net/detail/tyler_download/9435103 视频地址: http://v.youku.com/v_show/ ...
- PHP模板解析入门
学习:李炎恢PHP视频第二季 模板引擎的特点: 1.鼓励分离:让更个系统的可读性和维护性得到提高. 2.促进分工:使得程序员和美工去专心处理自己的设计. 3.比PHP更容易解析:编译文件和缓存文件加载 ...
- mybatis源码配置文件解析之五:解析mappers标签(解析XML映射文件)
在上篇文章中分析了mybatis解析<mappers>标签,<mybatis源码配置文件解析之五:解析mappers标签>重点分析了如何解析<mappers>标签中 ...
- PLSQL_解析过程及硬解析和软解析的区别(案例)
2014-08-11 Created By BaoXinjian
- Android中级之网络数据解析一之xml解析
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! --Comic Sans MS Xml解析具有跨平台性,语言无关性,易操作性,因此广受开发者的欢迎. ...
- Android初级教程:Android中解析方式之pull解析
在安卓中有很多种解析方式.按照大方向有xml解析和json解析.而,细致的分,xml和json解析各有自己的很多解析方式.今天这一篇主要介绍xml解析中的pull解析.对于xml的解析方式,我之前在j ...
随机推荐
- 知名区块链人脸识别公司iFace Chain [爱妃链] 支招,如何防止钱包数字币被盗...
最近众多钱包发行方跑路频发,让非常多的用户蒙受巨大经济损失,知名区块链人脸识别公司iFace Chain [爱妃链] 前日做客某区块链媒体为网友支招,如何防止钱包数字币被盗. 那么,用户怎么降低Tok ...
- [JLOI2016] 成绩比较
推石子 首先设\(d[i]=\sum_{t=1}^{U[i]}t^{n-R[i]}(U[i]-t)^{R[i]-1}\),即第\(i\)门课程分数的合法分布方案数: 然后设\(f[i,j]\)表示前\ ...
- IDLE打开Python报错 api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案
1.此方法转载至 http://blog.csdn.net/lt_java13/article/details/78814676 2.把C:\Windows\SysWOW64的api-ms-win-c ...
- Elasticsearch Java高级客户端
1. 概述 Java REST Client 有两种风格: Java Low Level REST Client :用于Elasticsearch的官方低级客户端.它允许通过http与Elastic ...
- MyWebViewDemo【封装Webview常用配置和选择文件、打开相机、录音、打开本地相册的用法】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装webview的常用配置和选择文件.打开相机.录音.打开本地相册的用法.[如果想要使用简单的预览功能,可以参考<MyBri ...
- CentOS 7 最小化安装配置以及网络服务器搭建、配置与管理
一.环境介绍: 运行软件:VMware Workstation Pro 系统环境:CentOS-7-x86_64-1810 系统网络运行模式:NAT模式 二.操作配置: 1.配置动态获取IP 1) 修 ...
- c#用winform开发一个简易双色球项目
开始画面 抽奖中: 抽奖结果: 需要一个随机数Random的帮助类,让随机数唯一性 public class RandomHelper { public int GetNum(int min, int ...
- MVC开发模式简述
了解MVC开发模式,首先我们要了解一下发展趋势 一.什么是软件设计 Jack W.Reeves 于14年前(1992年),就在其撰写的论文——<What is Software Design&g ...
- C#--深入理解类型
今日无事,回顾了一下C#基础知识,颇有收获,就自己的理解,写了这篇文章,如有不对,欢迎指正. C#中的类型可以分为两类:值类型与引用类型,如下图所示. 值类型通常被分配到线程的堆栈上,而引用类型则被分 ...
- Java设计模式---Strategy策略模式
参考于 : 大话设计模式 马士兵设计模式视频 1.场景介绍 购物网站上有一个产品,有三个字段,档次,价格,重量. 有些同学喜欢轻的,有些手头紧,想要便宜的,有些喜欢档次高的. 那么我们为了提高网站用户 ...