Windbg 调试CPU占用过高
1.!runaway
!runaway命令显示每个线程消费的时间
- Bit 0 (0x1) 让调试器显示每个线程消耗的用户模式时间(user time),默认不加就是0x1
- Bit 1 (0x2) 显示每个线程消耗的内核时间(kernel time)。
- Bit 2 (0x4) 显示每个线程从创建开始经历了多少时间。
- 就是三者的组合:1 2 3 4 5 6 7
-
- 0:002> !runaway
- User Mode Time
- Thread Time
- 0:890 0 days 0:00:00.031
- 2:a00 0 days 0:00:00.000
- 1:1174 0 days 0:00:00.000
- 0:002> !runaway 1
- User Mode Time
- Thread Time
- 0:890 0 days 0:00:00.031
- 2:a00 0 days 0:00:00.000
- 1:1174 0 days 0:00:00.000
- 0:002> !runaway 2
- Kernel Mode Time
- Thread Time
- 0:890 0 days 0:00:00.062
- 2:a00 0 days 0:00:00.000
- 1:1174 0 days 0:00:00.000
- 0:002> !runaway 3
- User Mode Time
- Thread Time
- 0:890 0 days 0:00:00.031
- 2:a00 0 days 0:00:00.000
- 1:1174 0 days 0:00:00.000
- Kernel Mode Time
- Thread Time
- 0:890 0 days 0:00:00.062
- 2:a00 0 days 0:00:00.000
- 1:1174 0 days 0:00:00.000
- 0:002> !runaway 4
- Elapsed Time
- Thread Time
- 0:890 0 days 0:38:34.825
- 1:1174 0 days 0:38:34.793
- 2:a00 0 days 0:38:24.528
- 0:002> !runaway 7
- User Mode Time
- Thread Time
- 0:890 0 days 0:00:00.031
- 2:a00 0 days 0:00:00.000
- 1:1174 0 days 0:00:00.000
- Kernel Mode Time
- Thread Time
- 0:890 0 days 0:00:00.062
- 2:a00 0 days 0:00:00.000
- 1:1174 0 days 0:00:00.000
- Elapsed Time
- Thread Time
- 0:890 0 days 0:38:41.825
- 1:1174 0 days 0:38:41.793
- 2:a00 0 days 0:38:31.528
该扩展命令可以用来快速找出哪些线程循环失去控制消耗了太多CPU时间。输出中以调试器的内部线程号和16进制线程ID来标识每个线程。还会显示调试器ID,当然,主要用于分析dump文件
-
2 ~
波形符(~) 命令显示指定线程或当前进程中的所有线程的信息
这条命令显示所有线程 -
0:001> ~
-
该命令也显示所有线程。
0:001> ~*
-
下面的命令显示当前活动线程。
0:001> ~.
-
下面的命令显示原始的产生异常的线程(或调试器附加到进程时活动的线程)。
0:001> ~#
-
下面显示号码为2的线程。
0:001> ~2
-
- <span style="color:#000000;">0:002> ~
- 0 Id: 17a4.eb4 Suspend: 1 Teb: 7ffdf000 Unfrozen
- 1 Id: 17a4.d4c Suspend: 1 Teb: 7ffde000 Unfrozen
- . 2 Id: 17a4.aac Suspend: 1 Teb: 7ffdd000 Unfrozen
- 0:002> ~*
- 0 Id: 17a4.eb4 Suspend: 1 Teb: 7ffdf000 Unfrozen
- Start: calc!WinMainCRTStartup (01012475)
- Priority: 0 Priority class: 32 Affinity: f
- 1 Id: 17a4.d4c Suspend: 1 Teb: 7ffde000 Unfrozen
- Start: winimhc!TGetLogConfig+0x507b (10012f7b)
- Priority: 0 Priority class: 32 Affinity: f
- . 2 Id: 17a4.aac Suspend: 1 Teb: 7ffdd000 Unfrozen
- Priority: 0 Priority class: 32 Affinity: f
- 0:002> ~0
- 0 Id: 17a4.eb4 Suspend: 1 Teb: 7ffdf000 Unfrozen
- Start: calc!WinMainCRTStartup (01012475)
- Priority: 0 Priority class: 32 Affinity: f
- 0:002> ~#
- . 2 Id: 17a4.aac Suspend: 1 Teb: 7ffdd000 Unfrozen
- Priority: 0 Priority class: 32 Affinity: f</span>
我们可以发现,~和~*还是有点区别的,~*会把入口函数和优先级都打印出来,
-
0 Id: 17a4.eb4 Suspend: 1 Teb: 7ffdf000 Unfrozen意思是0号线程,进程ID为17a4,线程ID为eb4,暂停数为1,未冻结状态
-
,每个线程都包含了一个暂停计数(Suspend Count),以及一个冻结/解冻(Frozen/Unfrozen)的状态。
暂停计数由Windows内核使用的值,可以通过SuspendThread和ResumeThread这两个系统函数来控制的,核心编程里说一个线程创建时,暂停次数为1, -
当线程完全初始化后,系统就要查看CREATE_SUSPEND标志是否已经传递给CreateThread。如果该标志没有传递,系统便将线程的暂停计数递减为0,
-
该线程可以调度到一个进程中
-
也可以用~<tid>n增加暂停计数,用~<tid>m减少暂停计数,如下:
-
- 0:002> ~0n
- 0:002> ~
- 0 Id: 17a4.eb4 Suspend: 2 Teb: 7ffdf000 Unfrozen
- 1 Id: 17a4.d4c Suspend: 1 Teb: 7ffde000 Unfrozen
- . 2 Id: 17a4.aac Suspend: 1 Teb: 7ffdd000 Unfrozen
- 0:002> ~0m
- 0:002> ~
- 0 Id: 17a4.eb4 Suspend: 1 Teb: 7ffdf000 Unfrozen
- 1 Id: 17a4.d4c Suspend: 1 Teb: 7ffde000 Unfrozen
- . 2 Id: 17a4.aac Suspend: 1 Teb: 7ffdd000 Unfrozen
- 0:002> ~0m
- 0:002> ~
- 0 Id: 17a4.eb4 Suspend: 0 Teb: 7ffdf000 Unfrozen
- 1 Id: 17a4.d4c Suspend: 1 Teb: 7ffde000 Unfrozen
- . 2 Id: 17a4.aac Suspend: 1 Teb: 7ffdd000 Unfrozen
- 0:002> ~1m
- 0:002> ~
- 0 Id: 17a4.eb4 Suspend: 0 Teb: 7ffdf000 Unfrozen
- 1 Id: 17a4.d4c Suspend: 0 Teb: 7ffde000 Unfrozen
- . 2 Id: 17a4.aac Suspend: 1 Teb: 7ffdd000 Unfrozen
比如我只调用一次~0n,那么主线程的引用计数变为2了,我再调用g,主线程的引用计数变为1,我们的calc是运行不起来的!
-
冻结状态是调试器的状态,在window操作系统中是不支持这个概念,对于每个被冻结的线程,调试器将记住这个状态,并且在调试事件被处理之前增加线程的挂起计数,当调试事件被处理完毕时,挂起计数将被递减,对应的命令为:
-
冻结~<tid>f
-
解冻~<tid>u
-
冻结命令数量必须和解冻命令数量相等
Windbg 调试CPU占用过高的更多相关文章
- WinDbg调试CPU占用高的问题 试验+实战 《第七篇》
一.High CPU试验 1.示例代码 static void Main(string[] args) { Console.Clear(); Console.WriteLine("到命令行下 ...
- Android去除CPU占用过高时屏幕四周闪红框
话说有些时间没有更新博客了,今天正好解决这个问题,顺便把它记录下来.. 今天遇到的情况是这样的,当CPU占用过高时,屏幕四周会出现一个红框. 闪一次两次算了,但是挺萌的(TMD)不停的闪,我的钛合金狗 ...
- 性能测试问题_Mysql数据库服务器的CPU占用很高
MySQl服务器CPU占用很高 1. 问题描述 一个简单的接口,根据传入的号段查询号码归属地,运行性能测试脚本,20个并发mysql的CPU就很高,监控发现只有一个select语句,且表建立了索引 ...
- Atitit. 最佳实践 QA----减少cpu占有率--cpu占用太高怎么办
Atitit. 最佳实践 QA----减少cpu占有率--cpu占用太高怎么办 跟个磁盘队列长度雅十,一到李80%走不行兰.... 1. 寻找线程too 多的.关闭... Taskman>> ...
- 一次java Cpu占用过高的排查
某一个项目CPU占用率一直很高,经常在40%-50%之间,最近比较闲,就开始了排查工作. 1.通过 jstack命令输出进程的堆栈信息 jstack 2788 >C:\log.txt 将堆栈信息 ...
- java 一次CPU占用过高问题的排查及解决
最近一段时间 某台服务器上的一个应用总是隔一段时间就自己挂掉 用top看了看 从重新部署应用开始没有多长时间CPU占用上升得很快 排查步骤 1.使用top 定位到占用CPU高的进程PID ...
- “RESOURCE MONITOR“CPU占用特别高
背景: SQL Server 2008 R2 10.50.1600 没有设置页面文件,内存为64G,数据库分配50G cpu使用占了50%以上,平时只有10-20%,某台服务器“RESOURCE MO ...
- kswapd0 进程CPU占用过高
前几天遇到的一个问题,自己本地用VM配置的虚拟机,一般会top查看进程以及CPU占用的一些情况.又一次用laravel 打印对象,里面的内容比较多,浏览器当时就卡了. 然后看进程的情况.我以为会是ng ...
- 工具运行过程中,CPU占用过高的分析定位
之前使用Java Swing开发了一款设备档案收集工具.支持多台设备同时收集,每个设备使用一个线程.在同时收集多台设备信息时,发现CPU占用率居然达到了97%,而且高居不下.显然这样的性能是令人无法忍 ...
随机推荐
- linux下设置Git
目录 ## Git介绍 1.工作原理 2.SVN与Git的最主要的区别? 3.操作 4.创建本地仓库 5.把文件添加到本地仓库 6.版本回退 7.理解工作区(workspace)与暂存区(index) ...
- jq-demo-tab切换
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Redis探索之路(三):Redis的五种数据类型String和Hash
一:String 存储二进制数据,可以图片,序列化对象 GET,SET SETNX(not exist) setnx age 33 返回 0,1 SETEX设置有效期 SETEX COLOR 2 ...
- Python 让文件代码支持汉字
默认使用ASCII编码,改成utf8 #!/usr/bin/env python # -*- coding:utf8 -*- #coding:utf-8
- 50 ubuntu下pcl编译以及用 VSCode配置pcl / opencv开发环境
0 引言 最近在VSCode下搞开发,于是将pcl库迁移到这个环境下,用来跑一些依赖pcl的开源的代码以及自己做一些快速开发等. 1 pcl编译 主要参考了这篇博客,链接如下. https://blo ...
- iOS7 AVAudioRecorder不能录音
今天写录音代码的时候,在iOS7以下就可以录音,但是iOS7上不可以,后来才知道iOS7录音方式变了,加上下面的代码就可以了,bingo AVAudioSession *audioSession = ...
- 数据结构C++版-队列
一.概念 分类: 二.补充说明 1.<面向对象的队列设计>课程问答: 首先要明确数据结构和数据存储结构的概念. 数据结构是指数据对象之间的逻辑关系,例如二叉树,队列,栈等,而数据存储结构是 ...
- (转)python基础之迭代器协议和生成器(一)
一 递归和迭代 二 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...
- spring MVC 全局的异常处理
1.使用SimpleMappingExceptionResolver实现异常处理 在Spring的配置文件applicationContext.xml中增加以下内容: <bean class=& ...
- ASP.NET网站要手机自适应页面
本文转载的地址:http://mobile.51cto.com/ahot-409516.htm 一. 允许网页宽度自动调整: "自适应网页设计"到底是怎么做到的? 其实并不难. 首 ...