突然有一天部署在服务器的一个应用挂掉了,没办法只能进入服务器打开

【事件查看器】查看下,好不容易找到了打开后一脸懵逼

事件查看器查到的内容根本对我们排障没有任何作用。

在这个时候如果有对应的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文件进行排障相关推荐

  1. ‍swf文件格式解析入门(tag解析)

    上文把文件头解析完成了,接下来就是解析标签 swf文件把所有的资源都打包在标签内部 如字体,位图,嵌入的2进制,代码等等 tag有两种类型,1种为短tag,1种为长tag 短tag的长度是小于63个字 ...

  2. Office 文件解析入门

    Office 文件解析入门 概述 - Office 解析相关协议 这里所讲的 Office 文件指的是微软 Office2007 及以后的 PPT/EXCEL/WORD 等文件格式,因为 Office ...

  3. 解析Caffe框架的prototxt模型文件

    文档目录 前言 1. 解析示例 2. 层解析 3. 完整文件 4. caffe模型权重转pytorch模型权重 前言   Caffe全称为Convolutional Architecture for ...

  4. Linux入门之inode解析及管道重定向

    Linux入门之inode解析及管道重定向 inode 简介: 当磁盘分区格式化后会根据分区格式.大小等信息来指定分区分配多少个inode表,每个inode表都会有一个在当前分区中唯一的编号,可能有一 ...

  5. 让你久等了《开源安全运维平台OSSIM疑难解析--入门篇》正式出版

    2019年暑期,众所期待的新书<开源安全运维平台OSSIM疑难解析--入门篇>由人民邮电出版社正式出版发行.此书从立意到付梓,历时超过两年,经过数十次大修,历经曲折与艰辛,希望为大家代奉献 ...

  6. 让你久等了!《开源安全运维平台OSSIM疑难解析--入门篇》9月上市

    2019年暑期,众所期待的新书<开源安全运维平台OSSIM疑难解析--入门篇>开始印刷,9月份即可预售.此书从立意到付梓,历时超过两年,经过数十次大修,历经曲折与艰辛,希望为大家代奉献一本 ...

  7. Python爬虫入门之爬虫解析提取数据的四种方法

    本文主要介绍了Python爬虫入门之爬虫解析提取数据的四种方法,通过具体的内容向大家展现,希望对大家Python爬虫的学习有所帮助. 基础爬虫的固定模式 笔者这里所谈的基础爬虫,指的是不需要处理像异步 ...

  8. SpringBoot入门-源码解析(雷神)

    一.Spring Boot入门 视频学习资料(雷神): https://www.bilibili.com/video/BV19K4y1L7MT?p=1 github: https://github.c ...

  9. 【AI 绘画】 MidJourney 入门、参数解析、进阶玩法、变现指南、资料包

    [AI 绘画] MidJourney 入门.参数解析.进阶玩法.变现指南.资料包|ai绘画|视频文件_网易订阅

最新文章

  1. 一种使用GDI+对图片尺寸和质量的压缩方法
  2. AC3 bit allocation
  3. 【Android 组件化】路由组件 ( 注解处理器参数选项设置 )
  4. 字节跳动---毕业旅行问题
  5. 第四十八期:只因写了一段爬虫,公司200多人被抓!
  6. 支付宝支付-手机浏览器H5支付
  7. Linux 实操———CentOS 6 安装配置 Tomcat
  8. 3D LUT Creator Pro for Mac(专业调色软件)中文版
  9. 实锤了!Chrome存在严重漏洞!
  10. 计算机机械和设计专业介绍,机械类包括哪些专业
  11. 基于springboot编写的小程序幸运转盘抽奖功能
  12. load语句报分区could not be cleaned up
  13. 爱情就像是免杀,连鞋都没脱,就悄无声息的走进了你的心里
  14. 解决VirtualBox增强功能异常
  15. 跑过的城市,走过的路
  16. 榕树贷款利用AI人工智能技术发送非常迅速(榕树贷款)
  17. Buffon投针实验 · 数学的直观理解 · 基础知识很重要
  18. 九章算法笔记D2-坐标型动态规划
  19. OGNL学习笔记-OGNL基础
  20. 创建自己的Docker映像(技术提示#57)

热门文章

  1. javascript权威指南--学习笔记
  2. Mysql 的子查询
  3. E-MapReduce上如何升级EMR-Core
  4. LeetCode 3_Longest Substring Without Repeating Characters
  5. keepalived 报错 Popt libraries is required
  6. Devuan Jessie beta 释出
  7. Codeforces Round #323 (Div. 2) C.GCD Table
  8. oslo.config资源
  9. XCode5 真机调试及发布应用
  10. LDAP启动cacao提示Invalid file permission