利用Dump转储文件获取正式环境程序堆栈状态
服务异常找不到原因时,我们通常通过重新启动服务来尝试解决问题,但是在决定重启之前,请不要立刻重启Windows服务或站点
重启服务会让当前案发现场的内存证据丢失,即便是服务恢复正常了,也无法确认问题发生的原因,利用 Windows Dump
转储文件,可以将正在运行中的服务或站点的堆栈信息保存下来,然后在Visual Studio或WinDbg来查看线上服务的对象信息
Dump转储文件生成
Dump转储文件可以通过 任务管理器 -> 进程 -> 右击指定进程 -> 创建转储文件 生成
创建成功后会提示Dump存储文件保存位置:
需要注意的是,创建Dump转储文件的过程,程序的所有线程将会被暂停,此时程序将无法进行响应
Dump转储文件创建的时间跟程序占用内存成正比,如果程序占用内存过大,将会创建失败,需要使用其他工具来创建
使用Visual Studio调试转储文件
转储后的DMP文件可以使用Visual Studio直接调试,但是VS并没有对 .DMP
格式绑定操作
打开Visaul Studio后在 打开 -> 文件 -> 选择.DMP文件,将会出现以下界面:
VS中支持DUMP转储文件进行原生VC,VC++调试,也可以进行托管代码调试,对于大部分.NET程序,使用 调试托管内存
会更加方便
选择 调试托管内存
,VS将会加载DMP文件中所有对象信息,等待片刻之后可以看到堆栈信息
托管内存调试支持查看当前线程的局部变量,在监视视图里面查看静态类内的私有字段,使用即时窗口执行C#代码
以上代码为排查配置文件获取配置为空问题,可以看到 ConfigHelper
中已经缓存的所有配置,部分配置项为空,修改配置文件重启程序即可