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高的问题的更多相关文章
- 记一次排查CPU高的问题
背景 将log4j.xml的日志级别从error调整为info后,进行压测发现CPU占用很高达到了90%多(之前也就是50%,60%的样子). 问题排查 排查思路: 看进程中的线程到底执行的是什么, ...
- WinDbg调试CPU占用高的问题 试验+实战 《第七篇》
一.High CPU试验 1.示例代码 static void Main(string[] args) { Console.Clear(); Console.WriteLine("到命令行下 ...
- SQLSERVER排查CPU占用高的情况
SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...
- CPU高问题排查
双11大战开始了,这几天公司系统压测,CPU各种报警,于是找了篇关于CPU高问题排查的文章. 一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. (友情提示:本博文章欢迎 ...
- cpu高 load 高 内存高 io 高怎么排查
一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. (友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hank ...
- 线上应用故障排查:高CPU占用
转自:hankchen,http://www.blogjava.net/hankchen 一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. 以我们最近出现的一个实际故障 ...
- 一次线上CPU高的问题排查实践
一次线上CPU高的问题排查实践 前言 近期某一天上班一开电脑,就收到了运维警报,有两台服务CPU负载很高,同时收到一线同事反馈 系统访问速度非常慢,几乎无响应. 一个美好的早晨,最怕什么就来什么.只好 ...
- 利用windbg分析崩溃,句柄泄漏,死锁,CPU高,内存泄漏
Windbg的一些简单使用命令 一.崩溃 1. 输入.ecxr;kbn得到崩溃的堆栈 其中源代码如下 2. 查看堆栈和源代码,发现第0帧导致崩溃,代码也是本地代码 输入.frame 0,切到第0 ...
- 性能排查--CPU占用高
排查思路: 1.先找到占用CPU高的进程PID top命令 2.top -H -p <PID> 查看哪个占用CPU高的线程TID 3.jstack <PID> /ho ...
随机推荐
- BLE MESH 学习[1] - ESP32 篇
BLE MESH 学习 BLE MESH 是一种蓝牙(n:m)组网的技术. 本篇先介绍 BLE MESH 到使用 ESP32 的官方示例对其进行学习讲解. 后面会进一步学习 SIG 的 BLE MES ...
- LeetCode 392. Is Subsequence 详解
题目详情 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母.字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 & ...
- Java学习书籍与社区
编码规范:<阿里巴巴Java开发手册> 技术架构:<大型网站技术架构核心原理与案例分析>---李智慧 Spring架构与设计原理解析:<Spring技术内幕深入解析Spr ...
- 对于python装饰器结合递归的进一步理解
对于python装饰器结合递归的进一步理解 代码如下: import functools def memoize(fn): print('start memoize') known = dict() ...
- MetadataCache更新
MetadataCache什么时候更新 updateCache方法用来更新缓存的. 发起线程 controller-event-thread controller选举的时候 CLASS_NAME ME ...
- 浏览器自动化的一些体会3 webBrowser控件之零碎问题
1. 一般需要执行这一句:webBrowser1.ScriptErrorsSuppressed = true; 主要目的是禁止跳出javascript错误的对话框,否则会导致程序无法正确地跑下去.缺点 ...
- J20航模遥控器开源项目系列教程(三)开发说明 | 想要自己改造程序,扩充功能,怎么实现?
我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/C ...
- Mybatis进阶使用-一级缓存与二级缓存
简介 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力.跟Hibernate 一样,MyBatis 也有一级缓存和二级缓存,并且预留了集成第三方缓存的接口. 一级缓存 ...
- Java 8新特性(一):Lambda表达式
2014年3月发布的Java 8,有可能是Java版本更新中变化最大的一次.新的Java 8为开发者带来了许多重量级的新特性,包括Lambda表达式,流式数据处理,新的Optional类,新的日期和时 ...
- Object中toString方法
在Java中,所有的对象都是继承自Object,自然继承了toString方法,在当使用System,out.println()里面为一个对象的引用时,自动调用toString方法将对象打印出来.如果 ...