首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我将进程附加到windbg时,CPU使用率就会变为0。

当我将进程附加到windbg时,CPU使用率就会变为0。
EN

Stack Overflow用户
提问于 2015-10-06 07:07:44
回答 2查看 389关注 0票数 1

我得到了一个内存转储,用于分析运行在Windows2008 R2 (客户端机器)上的服务的高CPU使用率。转储是使用任务管理器进行的。

我试着使用我们在提供给我的转储上可用的符号(这个转储是使用任务管理器),但没有成功。后来,我发现从任务管理器获取的转储不起作用,因此我使用Windbg在我的系统上转储服务。我能装载这些符号。

但是,我需要从客户端机器转储文件。当我试图通过将服务附加到Windbg来消耗85%左右的CPU时,它的转储,使我感到惊讶的是,它的CPU消耗突然下降到0%。

显然,我需要客户端机器的转储来分析发生了什么,以及为什么服务消耗了85%的CPU。

不知道如何使用Windbg进行转储,一旦我通过按F6附加服务,CPU消耗就会下降到0%。

EN

回答 2

Stack Overflow用户

发布于 2015-10-06 12:58:47

当您使用windbg附加时,所有线程都挂起在您的服务中,直到发出g命令。这就是为什么您的服务CPU消耗为零的原因。但这是可以的,因为您有一个快照,当CPU消耗达到85%时,您的所有线程都在做什么。~*kb命令将向您展示这一点。然后发出g,注意CPU消耗恢复。当它足够高时,插入(Debug \ Break),然后再次运行~*kb,查看线程在做什么。重复多次,您就会看到一个模式。另外,每次使用!runaway可以轻松地看到最繁忙的线程。

票数 6
EN

Stack Overflow用户

发布于 2015-10-06 16:13:55

不要使用转储,而是使用ETW来捕获CPU使用情况的跟踪。ETW跟踪包含调用的和,而不是像转储中那样的快照。要捕获跟踪,安装Windows SDK中的Windows性能工具包,打开一个命令提示符作为管理员并运行它来捕获CPU的使用情况:

-on延迟-stackwalk配置文件-buffersize 2048 -MaxFile 2048 -FileMode循环&超时-1 & xperf -d C:\HighCPUUsage.etl

在捕获完跟踪之后,通过双击ETL文件打开它。现在设置调试符号并加载它们

现在将CPU使用情况(抽样)图拖放到分析窗格中,并选择“进程利用率,堆栈”。

现在展开服务的堆栈,查看调用了哪些函数:

微软的在一段视频中解释了这一点

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32963784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档