• WinDbG工具实践


    WinDBG工具

    • WinDBG用来分析服务器上产生的dump文件信息
    • 处理CPU占满,内存居高不下的问题。
    • 程序死锁的问题

    处理步骤

    • 0 查看iis应用程序池对应的进程ID c:windowssystem32inetsrvappcmd list wp
      找出w3wp.exe对应的Web应用
      1. 使用producmp 工具监控服务器,当内存占用超过多少时生成dump文件 procdump64 w3wp -ma 20480 -o D:Dumps (当内存超过20G时生成Dump文件)
      1. 使用windb工具打开dump文件,并设置好符号文件(Symbol文件)及pdb文件的路径,设置代码路径
      1. 使用windb工具的命令进行分析操作
      • 载入sos.dll 执行.load C:WindowsMicrosoft.NETFramework64v4.0.30319SOS.DLL 需要根据程序的的版本来选择sos.dll文件的加载路径
      • 常用命令分析

    !help sos指令帮助
    !threads 显示所有线程
    !threadpool(!tp) 显示程序池信息
    !ProcInfo 显示进程信息
    !dumpheap 显示托管堆的信息
    !dumpheap -stat 检查当前所有托管类型的统计信息
    !dumpheap -type Person –stat 在堆中查找指定类型(person)对象,注意大小写敏感
    !clrstack 显示调用栈
    !clrstack -p 显示调用栈,同时显示参数
    !clrstack 只显示托管代码,而kb只显示非托管代码
    !dumpobj(!do) 显示一个对象的内容
    !dumparray(!da) 显示数组
    !DumpStackObjects(!dso) 当前线程对象分配过程
    !syncblk 显示同步块
    !runaway 显示线程cpu时间
    !gcroot 跟踪对象内存引用
    !pe 打印异常
    !ObjSize 查看对象大小 ObjSize 用于知道对象地址时,查看该对象的大小。
    !GCRoot 是一个非常有用的命令,它能够帮助我们发现某对象上目前还存在的有效引用。这也是为什么GC还不回收这个对象的原因。这个信息可以很好的帮助我们分析那些本应该没有引用,但却一直还存在有效引用的对象,由此发现我们代码中潜在的内存泄漏,同时我们也可以观察到哪些对象是目前没有引用了。
    ~*k 结合~和k命令,来显示所有线程的callstack
    .cls 清屏
    kb 显示当前线程的callstack

    https://blogs.msdn.microsoft.com/benjaminperkins/2016/11/07/lab-21-debugging-a-w3wp-process-with-high-memory-consumption/
    https://blogs.msdn.microsoft.com/benjaminperkins/2016/06/16/lab-19-debugging-a-high-cpu-hang-w3wp-process-using-windbg/

  • 相关阅读:
    poj2186强连通分量
    poj1459SAP最大流模板题
    poj2391Floyd+二分+最大流
    curl上传下载入门
    Mysql存储过程
    小球旋转
    钟表单摆
    java小记 摘抄
    servlet的一些收集总结
    Javascript基础小结
  • 原文地址:https://www.cnblogs.com/fengshi1988/p/9999762.html
Copyright © 2020-2023  润新知