我有一个来自Azure App Service的完整minidump。它附带.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,尽管它在同一个文件夹中,当它也在符号路径中时,也是当它被重命名为此处列出的特定版本时。
我只是想知道为什么我的App Service会在一段随机时间后陷入100%的CPU!我可以尝试接下来的步骤吗?
答案 0 :(得分:3)
看起来你对WinDbg并不是很熟悉,所以我会比必要的更冗长。
WinDbg - x86是可以打开此转储文件的版本
WinDbg的任何版本和位数都可以打开转储。即使32位WinDbg也可以打开64位.dmp文件。这并不意味着您使用正确的版本来完成您想要实现的目标。
这不会产生错误,也不会产生其他输出。
没关系。这意味着扩展已成功加载。这很好,因为这意味着你正在使用WinDbg的正确位数。如果它真的是您使用的x86 WinDbg,则表示您有32位SOS DLL。
如果位数不正确,则会收到错误消息,就像尝试将32位DLL加载到64位进程中一样,反之亦然(在.NET中也称为BadImageFormatException
)
扩展命令需要clr.dll才能完成任务。
SOS扩展适用于.NET,因此SOS正在寻找加载到该进程中的.NET框架。这可能是
clr.dll
适用于.NET 4 / 4.5,可能更高mscorwks.dll
for .NET 2/3 / 3.5 coreclr.dll
用于Silverlight和.NET Core 从消息中,我们可以得出您有一个用于.NET 4的SOS.dll,这就是为什么它正在寻找clr.dll
而不是其他东西。 Azure Web服务听起来很合理,因为Azure比.NET 2更新。
要查看.NET是否实际加载到进程中,请使用以下命令:
lm m clr
lm m mscorwks
lm m coreclr
如果这些命令中的任何一个产生了一些输出,您将知道加载了哪个版本。请注意,.NET 4和.NET 2可能并行发生(在此过程中使用的两个版本)。
我已经在mscordacwks.dll上直接尝试.load,将其重命名为clr.dll。
这是一个巨大的误解:
.load
将一些内容加载到WinDbg进程中。即使你设法在那里加载它,SOS仍然会在转储文件中搜索它。mscordacwks
不是.NET框架。不要将其与mscorwks
混淆。 dac 部分用于数据访问控制。它是一个DLL来管理对内存中.NET结构的访问,因为.NET有自己的内存管理。但是,可能需要重命名它。那是一个很难的故事。您似乎已经找到了Google的结果......
将其重命名为mscordaccore_X86_X86_4.6.24628.01.dll
它走向正确的方向,但我不认为这是正确的名称。您是否介意将原始建议联系起来,以便我可以在抱怨我可能已经掌握的旧知识之前进行一些研究?
恕我直言,名称应为
mscordacwks_x86_x86_4.6.24628.01.dll
(如果版本号正确)。
正如@Lieven Keersmaekers已在评论中所提到的那样,拥有correct symbol path pointing to Microsoft然后再做
!analyze -v
应该从Microsoft下载必要的mscordacwks文件。这样它就会自动拥有正确的名称并位于正确的文件夹中。
我也尝试过运行DebugDiag 2分析工具
为使DebugDiag正常工作,它还需要mscordacwks。最简单的方法是使用Microsoft符号服务器,以便它可以自行下载文件。
我只是想知道为什么我的App Service卡在100%CPU
从单个崩溃转储文件中分析错误。捕获崩溃转储文件时,该过程可能只是做了“正常”的事情。
如果您有许多具有相同调用堆栈的故障转储,则可能表示此方法处于无限循环或长时间运行循环中。要在高CPU下自动获取许多故障转储,请尝试ProcDump,请参阅how to take a good crash dump for .NET
还有什么可能出错?
你说你被提供了这些文件。从文件的命名,我假设它们是从发生崩溃的机器中取出的。这基本上是个好主意。请注意,PC上有许多此类文件。
如果你运行我的工具mscordacwks Collector,你会明白我的意思。顺便说一下,该工具将检测版本并相应地重命名文件。也许你可以尝试一下,机器仍然可用。