我正在寻找从生产环境中收集的转储文件以获得高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或任何其他扩展中是否有任何其他命令可以提供帮助?
答案 0 :(得分:2)
您需要一个向转储添加必要信息的工具。
在WinDbg中,.dump
命令具有/mt
MiniOption,
向minidump添加其他线程信息。这包括线程时间,可以在调试minidump时使用!runaway 扩展名或 .ttime(显示线程时间)命令显示。
(重点:WinDbg中的链接)
t
选项也包含在a
选项中,因此.dump /ma
也可以。
要确定您的转储是否包含该信息,请使用未记录的命令.dumpdebug
,如下所示:
.shell -ci ".dumpdebug" findstr "MiniDump"
如果有一行
1000 MiniDumpWithThreadInfo
信息已包含,您有不同的问题。如果不存在,则无法获得时间信息。
我所知道的大多数其他工具都没有提供这样详细的设置,因此无论是否包含此信息,运气或多或少都是运气。