一、概述
在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