zoukankan      html  css  js  c++  java
  • 使用Dump转储文件排查线上环境服务未知问题

    利用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 中已经缓存的所有配置,部分配置项为空,修改配置文件重启程序即可

  • 相关阅读:
    在VS中用CLAPACK解决广义特征值问题
    再议:__cdecl与__stdcall 调用约定在动态链接库调用中不同的表现
    类成员析构、虚析构函数、动态生成对象相关的 关于析构顺序的杂谈
    C++ 中dynamic_cast的使用方法
    函数传值 复制构造函数 深度拷贝
    hdoj_1867A + B for you again
    如何判断一个数是否为素数
    hdoj_2087剪花布条
    STL容器之优先队列
    hdoj_4006优先队列的使用
  • 原文地址:https://www.cnblogs.com/Gool/p/9810124.html
Copyright © 2011-2022 走看看