一、概述

在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高的问题的更多相关文章

  1. 记一次排查CPU高的问题

    背景 将log4j.xml的日志级别从error调整为info后,进行压测发现CPU占用很高达到了90%多(之前也就是50%,60%的样子). 问题排查 排查思路:  看进程中的线程到底执行的是什么, ...

  2. WinDbg调试CPU占用高的问题 试验+实战 《第七篇》

    一.High CPU试验 1.示例代码 static void Main(string[] args) { Console.Clear(); Console.WriteLine("到命令行下 ...

  3. SQLSERVER排查CPU占用高的情况

    SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...

  4. CPU高问题排查

    双11大战开始了,这几天公司系统压测,CPU各种报警,于是找了篇关于CPU高问题排查的文章. 一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. (友情提示:本博文章欢迎 ...

  5. cpu高 load 高 内存高 io 高怎么排查

    一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. (友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hank ...

  6. 线上应用故障排查:高CPU占用

    转自:hankchen,http://www.blogjava.net/hankchen 一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. 以我们最近出现的一个实际故障 ...

  7. 一次线上CPU高的问题排查实践

    一次线上CPU高的问题排查实践 前言 近期某一天上班一开电脑,就收到了运维警报,有两台服务CPU负载很高,同时收到一线同事反馈 系统访问速度非常慢,几乎无响应. 一个美好的早晨,最怕什么就来什么.只好 ...

  8. 利用windbg分析崩溃,句柄泄漏,死锁,CPU高,内存泄漏

    Windbg的一些简单使用命令 一.崩溃 1.  输入.ecxr;kbn得到崩溃的堆栈 其中源代码如下 2.  查看堆栈和源代码,发现第0帧导致崩溃,代码也是本地代码 输入.frame  0,切到第0 ...

  9. 性能排查--CPU占用高

    排查思路: 1.先找到占用CPU高的进程PID    top命令 2.top -H -p <PID>  查看哪个占用CPU高的线程TID 3.jstack <PID>  /ho ...

随机推荐

  1. C#设计模式之16-迭代器模式

    迭代器模式(Iterator Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/417 访问. 迭代器模式 ...

  2. css中关于:nth-child()和:nth-of-type()的深入理解

    css中关于:nth-child()和:nth-of-type()的深入理解 在css中有这样一类属性,是以:nth-开头的,其中最常见的就是:nth-child() 和 :nth-of-type() ...

  3. python的一些使用体会

    python刚开始接触,因为刚好有点需求,所以写了点小程序,一点点体会. 优点: 1. os.rename()方法不错,c#就没有这个方法 2.字符串的slice操作不错,取substring有时比较 ...

  4. python 常用函数集合

    1.常用函数     round() :  四舍五入         参数1:要处理的小数         参数2:可选,如果不加,就是不要小数,如果加,就是保留几位小数     abs() :绝对值 ...

  5. python:**kwargs

    **kwargs接收键值对参数,即字典, dict的pop()函数内需传2个参数,第一个参数为dict内的key, 如果有该key>第二个参数为None,最后的结果就是该key对应的value. ...

  6. Vue生命周期,我奶奶看了都懂了

    最近一直在学习Vue,而vue生命周期是我们不可能绕开的一个很核心的知识点,今天来简单的梳理一下大概的内容. 一.钩子函数 在一开始学习的时候,总有钩子函数这个名词冒出来,而且在vue官网文档中也频繁 ...

  7. pandas外部数据的读取构造数据框-文本文件读取(一种utf-8中文编码乱码处理经验)

    上面一篇文章有记录pandas构造数据框的方式有二维数组,字典,嵌套的列表和元组等,本篇用于介绍通过外部数据读取的方式来构造数据框. python读取外部数据集的时候,这些数据集可能包含在文本文件(c ...

  8. wordpress建站如何用SMTP配置邮件通知

    前提条件:你已经有了企业邮箱,相关文章请看:如何开通阿里云企业邮箱免费版(点此前往) 不建议使用主机商提供的邮箱,因为换主机商是比较常见的事情,因此导致的邮箱迁移就有些麻烦了,不如一开始就选择独立的第 ...

  9. Linux系统时间同步方法

    在Windwos中,系统时间的设置很简单,界面操作,通俗易懂,而且设置后,重启,关机都没关系.系统时间会自动保存在BIOS时钟里面,启动计算机的时候,系统会自动在BIOS里面取硬件时间,以保证时间的不 ...

  10. linux网络配置及虚拟机连接不上网排错思路

    第1章          操作系统与虚拟软件的使用 1.1  虚拟软件使用方法 Vmware 1.1.1  开启vmware 注: 同时只能开启一个VMware软件,如果开了两个VMware窗口 提示 ...