高 CPU 使用率的 32 位进程的 Process Dump 分析

Posted

技术标签:

【中文标题】高 CPU 使用率的 32 位进程的 Process Dump 分析【英文标题】:Process Dump analysis of 32 bit process for High CPU usage 【发布时间】:2020-06-10 11:34:59 【问题描述】:

我有一个 32 位 CPP Windows 服务应用程序,有时它的 CPU 使用率会随机升高 (70%)。我已经从 32 位任务管理器(32 位转储)和 64 位任务管理器(64 位转储)中获取了 exe 的进程转储。谁能指导我如何分析这些转储,以确定我的代码的哪一部分导致了这种高 CPU 使用率。

【问题讨论】:

你应该可以在visual studio或windbg中打开它 在 WinDbg 中打开转储并使用!runaway。这使您可以细分进程中每个线程所花费的时间。有关详细信息,请参阅帮助文件。 我正在使用 VS 调试转储,我在调试转储时看到多个线程正在运行。无论如何我们可以知道哪个线程占用了高 CPU? @BrianRasmussen 【参考方案1】:

高CPU使用率32位进程的Process Dump分析

我建议你可以在visual studio中调试这些转储文件,这样你就可以发现哪里出了问题。

建议

1) install Windows Driver Kit in VS

2)打开VS并选择File-->Open-->File-->选择dump文件。

3) 将 dll 和 pdb 文件(xxx\project name\bin\Debug) 的路径配置到 Symbols Window 中,并在 Symbols Window 下查看 Microsoft Symbol Server。

4)然后您可以点击Debug with Managed Only进行调试。

更详细的步骤可以参考Use Visual Studio to debug the dump files。

另外,你也可以试试use Windbg to analysis dump files和this。

【讨论】:

感谢您的回答。我正在使用 VS 调试转储,我在调试转储时看到多个线程正在运行。无论如何我们可以知道哪个线程占用了高 CPU? @Perry Qian-MSFT

以上是关于高 CPU 使用率的 32 位进程的 Process Dump 分析的主要内容,如果未能解决你的问题,请参考以下文章

如何在不等待 1 秒的情况下对进程的 CPU 使用情况进行采样

Microsoft(C)注册服务器(32位)CPU占用高

进程相关

获取进程的 CPU 和内存使用情况的正确性能计数器是啥?

如何定位cpu占用率高的java线程

Linux网络编程