【发布时间】:2016-12-09 20:19:23
【问题描述】:
我有一个来自 Azure 应用服务的完整小型转储。它带有 .dmp 文件、sos.dll 和 mscordacwks.dll。
我有 WinDbg - x86 是可以打开这个转储文件的版本。然后我使用 .load c:\path\to\sos.dll。这不会产生错误,但也不会产生其他输出。
下一个建议的命令 !sos.threads 给出:
找不到运行时DLL(clr.dll),0x80004005 扩展命令需要 clr.dll 才能有事可做。
我已尝试直接在 mscordacwks.dll 上加载 .load,将其重命名为 clr.dll。我已将该文件复制到我的符号路径中,并将其重命名为 mscordaccore_X86_X86_4.6.24628.01.dll,这是在我在这里的任务中出现的。
我也尝试过运行 DebugDiag 2 分析工具,但它说它无法加载 mscordacwks,尽管它位于同一个文件夹中,当它位于符号路径中时,也当它重命名为上面的特定版本时这里也列出了。
我只想知道为什么我的应用服务在随机时间后卡在 100% CPU 上!我可以尝试哪些后续步骤?
【问题讨论】:
-
您是否尝试
!analyze -v或!runaway来获取卡住的线程(假设它只有一个) 和~<threadnumber>s;kbnf来获取该线程的本机堆栈跟踪线?也就是说,转储只是一个时间点,因此您可能会以这种方式错过真正的原因。更好的是使用 procmon (更容易分析) 或 ETW (更难分析,但信息量很大) 来获得一段时间内的流程概览. -
@LievenKeersmaekers 谢谢,我会试试的。这是一项 Azure 应用服务 - 不要认为我可以在服务器上安装 procmon 或设置 ETW。有很多线程(约 40 个),一些等待工作(App Insights 上传线程),一些等待访问查询缓存(EF Core)
-
最好使用 ETW:stackoverflow.com/a/39856838/1466046 而不是分析转储中的快照。 WPT 可以复制到其他系统(仅确保 CPU 架构匹配)
标签: .net debugging azure-web-app-service windbg