WinDbg排查CPU高的问题

网友投稿 339 2022-06-23


一、概述

在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://cnblogs.com/huangsitao/p/10299300.html


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用Outlook对象筛选的_Items.Restrict方法时,“不支持使用like的模糊查询”
下一篇:.NET 合并程序集(将 dll 合并到 exe 中)(.net core和.net framework的区别)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~