如何分析 Windows 内核模式 CPU 过度使用?

如何分析 Windows 内核模式 CPU 过度使用?

我的 Windows XP 机器最近开始半冷冻我每次使用几分钟后就会重新启动(不同的程序/根本没有启动额外的程序)。


更新:我现在设法通过 Process Explorer 获得了更多详细信息。这是一个 2 核 CPU,内核使用率 100% 只出现在一个核上。进程列表显示DPC——延迟过程调用为 50%(即一个核心为 100%)。所以现在的问题是:**什么是 DPC,我该如何修复它们??


下次更新:OKIES...使用我已经能够在 Windows XP 上运行 xperf,并且我获取的样本转储在 Win7 笔记本电脑上显示正常。是的,您需要一台 Win7/Vista 计算机才能查看在 Windows XP 上获取的转储。 然而,我现在面临以下问题,我可以启用 xperf 跟踪xperf -on Latency并且问题现在在 xperf 跟踪开启时再次出现,但只要我的 DPC 达到 100%,Windows 不会启动任何新进程(或者他们的创业公司永远无法完成)(例如cmd 窗口保持响应良好,但您尝试调用的每个 exe 都挂起(dir工作正常,因为这是一个 cmd 命令)——我只能假设CreateProcess挂起的是内核的某个部分)。现在,无法启动任何新进程意味着我不能跑xperf -d dumpfile.etl,因为,当我在 cmd 窗口中输入该命令时,它只是挂了

所以看来我运气不好。我宁愿扔掉整个设备也不愿开始手动禁用驱动程序... :-)

任何其他想法都值得赞赏!


也就是说,虽然 Windows 在理论上仍然保持响应(例如鼠标光标正常移动并且我可以单击,并且该单击最终被识别),但用户采取的操作仅在几分钟后才得到响应(字面意思)。

示例:按键盘上的 Num-lock 键通常会切换键盘上的 Num-lock LED。我的半死机机器也是这种情况,但要过一两分钟才会恢复。

有一次,我成功启动进程探索器几分钟后,系统信息图上的红线(内核模式)清楚地显示 CPU 使用率为 100%,而绿线保持在零。在这种状态下,虽然屏幕上的图表仍在更新,但机器无法再运行。(好吧,除非你愿意在每次点击后等待几分钟。)

所以,现在我想知道问题可能出在哪里,因为我已经有几周没有在这台机器上安装任何新东西了,当然在看到这种行为之前也没有。(重新启动有时会有所帮助,有时我需要第二次或第三次重新启动才能让机器在更长的时间内可用。)

现在,我如何才能知道什么是否实际上导致了内核模式的过度使用?


注意:还发布了此内容sysinternals 论坛

答案1

您可以使用 LatencyMon 等工具找出导致冻结的 DPC 例程(http://www.resplendence.com/latencymon)。只需查找耗时最长的 DPC 例程。

答案2

我的问题是,在没有运行任何应用程序的情况下,内核模式 CPU 使用率达到 90% 以上。这台机器非常旧,只有 2 GB 的 RAM,运行的是 2013 年最新更新的 Windows XP。DPC 延迟检查器最初指示一切正常,我应该能够运行不间断的流媒体 - 在 CPU 使用率达到 90% 的情况下,这实际上是不可能的。然而,运行几分钟后,DPC 延迟检查器改变了评估结果,指出“驱动程序”运行不良,并建议使用设备管理器禁用尽可能多的设备,看看问题是否消失。

我禁用了几个设备,最终发现,如果我禁用所有 USB 设备,我的问题就完全消失了 - 空闲时 CPU 使用率为 2%。我认为如果其他一些设备无法正常工作,这种技术也会起作用,所以如果您遇到类似的问题,请从那里开始。

相关内容