【问题标题】:Error with !runaway command!runaway 命令出错
【发布时间】:2016-04-14 18:02:01
【问题描述】:

我正在寻找从生产环境收集的转储文件,以提高 CPU 使用率。我运行 !threadpool!runaway 命令如下

0:000> !ThreadPool
CPU utilization: 100%
Worker Thread: Total: 6 Running: 2 Idle: 4 MaxLimit: 32767 MinLimit: 4
Work Request in Queue: 0
--------------------------------------
Number of Timers: 8
--------------------------------------
Completion Port Thread:Total: 8 Free: 3 MaxFree: 8 CurrentLimit: 8 MaxLimit: 1000 MinLimit: 4

0:000> !runaway
ERROR: !runaway: extension exception 0x80004002.
    "Unable to get thread times - dumps may not have time information"

我想知道哪些线程消耗的 CPU 时间最多,但我无法运行 !runaway 命令。在这种情况下,sos、sosex 或任何其他扩展中是否有任何其他命令可以提供帮助?

【问题讨论】:

  • 您是如何捕获转储的?我会使用 ETW/WPA 来分析 CPU 使用率:channel9.msdn.com/Shows/Defrag-Tools/… 但使用 WPRUI.exe(在资源下选择 CPU 使用率 并在 1 分钟后点击 start,点击保存)

标签: windbg sos sosex


【解决方案1】:

您需要一个工具来将必要的信息添加到转储中。

在 WinDbg 中,.dump 命令具有/mt MiniOption,其中

向小型转储添加额外的线程信息。这包括线程时间,可以在调试 minidump 时使用 !runaway 扩展或 .ttime(显示线程时间) 命令显示。

(重点:WinDbg 中的链接)

t 选项也包含在 a 选项中,因此 .dump /ma 也可以。

要了解您的转储是否包含该信息,请使用未记录的命令.dumpdebug,如下所示:

.shell -ci ".dumpdebug" findstr "MiniDump"

如果有一行

1000 MiniDumpWithThreadInfo

信息已包含在内,但您遇到了不同的问题。如果不存在,则时间信息不可用。

我知道的大多数其他工具都没有提供如此详细的设置,因此无论是否包含此信息,都或多或少是运气。

【讨论】:

  • 嗨@Thomas,我已经尝试了你的建议,我可以在输出中得到1000 MiniDumpWithThreadInfo。您能否建议一些基本命令来解决!runaway 命令失败的可能原因。
  • @AjendraPrasad:您能否通过电子邮件与我联系并提供受影响的故障转储 as,以便我分析问题?我从来没有遇到过这样的情况,所以我不知道下一步该怎么做。我自己需要一些时间。
  • 感谢您的合作,但转储已提供保密协议。但是,我尝试了另一个 Microsoft 工具来分析转储“下载调试诊断工具 v1.2”。它为我提供了前 5 个耗时的线程。再次感谢
猜你喜欢
  • 2016-11-10
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多