【问题标题】:How to print execution stack of threads while they are consuming lots of CPU?如何在消耗大量 CPU 时打印线程的执行堆栈?
【发布时间】:2012-02-24 00:51:16
【问题描述】:

有谁知道如何完成以下任务。

应用程序有时会占用大量 CPU,ProcessExplorer (procexp.exe) 会显示周期性的高内核 CPU 负载 (~60-80)。我在 procexp 中看到一些线程做一些消耗大量内核时间的事情。在那一刻,我想打印那些繁忙线程的执行堆栈。

是否有任何监控工具可以显示此类信息或某些 WinDbg 脚本等?

【问题讨论】:

  • 我刚刚发布了答案,假设这是关于 java 进程的。对不对,不然我删了。
  • 不,它是 Windows 上的 .net/native 进程。抱歉,我之前没提过。

标签: multithreading cpu windbg diagnostics


【解决方案1】:

我建议使用ProcDump

类似的命令:

procdump -c 60 -s 3 -ma -n 5 -x Your.exe your.dmp

当进程连续 3 秒超过 60% 的 CPU 使用率并执行最多 5 次时,这将进行完整的内存转储。通过这种方式,您可以比较不同的转储,并查看进程在哪里花费时间。

【讨论】:

    【解决方案2】:

    一个机会是使用 sysinternals 中的 ProcDump 在以下情况下进行转储 CPU 负载超过您指定的限制。 http://technet.microsoft.com/en-us/sysinternals/dd996900
    或者,您可以查看 windbg 帮助中的“Tracking Down a Processor Hog”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2018-09-23
      • 1970-01-01
      • 2011-02-05
      • 2015-07-19
      • 1970-01-01
      相关资源
      最近更新 更多