WinDbg排查CPU高的问题

Posted 莫默漠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WinDbg排查CPU高的问题相关的知识,希望对你有一定的参考价值。

一、概述

在Window服务器部署程序后,可能因为代码的不合理或者其他各种各样的问题,会导致CPU暴增,甚至达到100%等情况,严重危及到服务器的稳定以及系统稳定,但是一般来说对于已发布的程序,没法即时看到出问题的代码,而微软提供了一个很好的工具“WinDbg”,使得我们能够回溯问题。下面讲一下操作步骤。

 

二、操作步骤

1. 下载软件:

  下载地址:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools

  

 

2. 安装

  只需要选择:Debugging Tools for Windows 即可。  

  

 

3. EXE位置

  {安装目录}/Debugger/{x64 || x86}/windbg.exe

 

4. 获取DMP文件

(1)打开任务管理器

(2)选择CPU较高的进程

(3)右键“创建转储文件”

(4)获取最后的目录位置,拿到DMP文件即可

  

 

5. 查看有问题的进程(已准备w3wp.DMP文件)

(1)打开windbg.exe

(2)将w3wp.DMP 拖入窗口

(3)输入指令加载sos clr

  .loadby sos clr

(4)检查clr版本是否一致

  !clrstack

  下图表示clr不存在或者版本不一致

  

 

  

  这个时候就需要将DMP文件所在服务器的sos.dll clr.dll mscordacwks.dll 三个dll拷贝下来,所在位置:C:\\Windows\\Microsoft.NET\\Framework?\\version?\\SOS.dll 同目录下

  放到一个目录中:【D:\\windb\\dll】,以下指令用于指定对应的sos.dll,clr.dll

  .cordll -lp D:\\windb\\dll

  

 

(5)获取执行时间很长的线程

  !runaway

  

  可以看到前几个线程执行了很长时间没有结束掉,那么我们就进入这个线程,查看具体的堆栈信息

(6)进入线程

  ~{threadId}s => ~61s

  

 

(7)查看堆栈信息

  !clrstack

  

  上图即可看到对应的一些自定义的代码,即可根据这些代码分析哪块代码写得不合理,也还可以点击进入查看详细的信息

  

 

 

6. 以上为简单的查看CPU过高的简单解决方案案例,对于WinDbg的相关指令可以使用搜索引擎进行搜索学习。以下附上一些文章:

 

 

https://blog.csdn.net/iwilldoitx/article/details/81048500

 

https://www.cnblogs.com/huangsitao/p/10299300.html

 

以上是关于WinDbg排查CPU高的问题的主要内容,如果未能解决你的问题,请参考以下文章

中小研发团队架构实践之WinDbg

WinDbg排查.net性能或内存问题步骤简述

使用Windbg排查线程死锁引起的连不上服务器问题

记一次使用windbg排查内存泄漏的过程

记一次使用windbg排查内存泄漏的过程

C++异常分析使用windbg分析dump文件,排查模态框返回时的崩溃问题