使用Dump转储文件排查线上环境服务未知问题

利用Dump转储文件获取正式环境程序堆栈状态

服务异常找不到原因时,我们通常通过重新启动服务来尝试解决问题,但是在决定重启之前,请不要立刻重启Windows服务或站点

重启服务会让当前案发现场的内存证据丢失,即便是服务恢复正常了,也无法确认问题发生的原因,利用 Windows Dump 转储文件,可以将正在运行中的服务或站点的堆栈信息保存下来,然后在Visual Studio或WinDbg来查看线上服务的对象信息

Dump转储文件生成

Dump转储文件可以通过 任务管理器 -> 进程 -> 右击指定进程 -> 创建转储文件 生成

使用Dump转储文件排查线上环境服务未知问题

创建成功后会提示Dump存储文件保存位置:

使用Dump转储文件排查线上环境服务未知问题

需要注意的是,创建Dump转储文件的过程,程序的所有线程将会被暂停,此时程序将无法进行响应

Dump转储文件创建的时间跟程序占用内存成正比,如果程序占用内存过大,将会创建失败,需要使用其他工具来创建

使用Visual Studio调试转储文件

转储后的DMP文件可以使用Visual Studio直接调试,但是VS并没有对 .DMP 格式绑定操作

打开Visaul Studio后在 打开 -> 文件 -> 选择.DMP文件,将会出现以下界面:

使用Dump转储文件排查线上环境服务未知问题

VS中支持DUMP转储文件进行原生VC,VC++调试,也可以进行托管代码调试,对于大部分.NET程序,使用 调试托管内存 会更加方便
选择 调试托管内存 ,VS将会加载DMP文件中所有对象信息,等待片刻之后可以看到堆栈信息

托管内存调试支持查看当前线程的局部变量,在监视视图里面查看静态类内的私有字段,使用即时窗口执行C#代码

使用Dump转储文件排查线上环境服务未知问题

以上代码为排查配置文件获取配置为空问题,可以看到 ConfigHelper 中已经缓存的所有配置,部分配置项为空,修改配置文件重启程序即可

上一篇:你要偷偷学会排查线上CPU飙高的问题,然后惊艳所有人!


下一篇:iOS JsonModel 的使用