【发布时间】:2020-10-06 15:17:33
【问题描述】:
我正在尝试诊断 Azure Web App 上的内存泄漏。
我使用诊断和解决问题 > 诊断工具 > 收集内存转储(工具引用 here)。
这会收集 dmp 文件并生成分析报告。我可以在 Crash Hang Analysis 中看到线程和其他信息,但 DotNetMemoryAnaysis 总是失败并出现错误
Type: System.OutOfMemoryException
Message: Exception of type 'System.OutOfMemoryException' was thrown.
Stack Trace:
DebugDiag.DotNet.NetDbgObj.d__73.MoveNext()
System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
System.Linq.Lookup`2.Create[TSource](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
System.Linq.GroupedEnumerable`3.GetEnumerator()
System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
System.Linq.Buffer`1..ctor(IEnumerable`1 source)
System.Linq.OrderedEnumerable`1.d__1.MoveNext()
System.Linq.Enumerable.d__25`1.MoveNext()
System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
DebugDiag.AnalysisRules.DotNetMemoryAnalysis.GCRootWalker.ShowRoots(NetScriptManager manager, NetDbgObj debugger, NetProgress progress, IEnumerable`1 top40Query) in C:\src\DebugDiag\Development\src\DebugDiag.AnalysisRules\DotNetMemoryAnalysis.cs:line 1875
DebugDiag.AnalysisRules.DotNetMemoryAnalysis.DoDotNetMemoryAnalysis() in C:\src\DebugDiag\Development\src\DebugDiag.AnalysisRules\DotNetMemoryAnalysis.cs:line 222
DebugDiag.AnalysisRules.DotNetMemoryAnalysis.RunAnalysisRule(NetScriptManager manager, NetProgress progress) in C:\src\DebugDiag\Development\src\DebugDiag.AnalysisRules\DotNetMemoryAnalysis.cs:line 182
DebugDiag.DotNet.NetAnalyzer.RunAnalysisRulesInternal(DumpFileType bitness, NetProgress progress, String symbolPath, String imagePath, String reportFileFullPath, Boolean twoTabs, AnalysisModes analysisMode)
我尝试使用dotnet-dump cli 工具分析文件,但任何分析操作都会出错
SOS does not support the current target architecture 0x0000014c。
在 Visual Studio 中打开 dmp 似乎也没有提供任何分析选项,只是调试。
有没有办法从另一台机器上运行 dmp 分析?我应该以其他方式收集转储吗?
更新
windows上azure web应用使用的分析工具可以在https://www.microsoft.com/en-us/download/confirmation.aspx?id=58210下载
但这并没有解决我的问题。我仍然遇到内存不足异常。
我监控了系统内存使用情况,但它从未接近过满。
Program Files\DebugDiag\AnalysisRules\DebugDiag.AnalysisRules.dll.config 中的 GCRootTimeout 增加。
我还在我能找到的每个配置文件中设置了gcAllowVeryLargeObjects。
【问题讨论】:
-
我只是想确认您在应用服务计划中运行的是 S1 或更高版本的 SKU?您的应用是 .NETCORE 还是 .NETFX?版本?如果您有转储文件,您是否尝试过使用WinDb?应用名称是什么?要私下分享,请将其发送至 AzCommunity[at]microsoft[dot]com ATTN Ryan,我会看看。
-
谢谢瑞恩。我的应用服务计划是运行 .Net Framework 4.8 Asp.NET MVC 5 站点的 P1V2。我还没有尝试过 WindDbg。我现在已经在 WinDbg 中加载了 dmp,但是如何获取我需要的信息并不明显。我需要进行一些研究和实验。我会尽快将具体的站点详细信息发送到电子邮件中。再次感谢!
-
您需要从
.loadby sos clr开始加载SOS extensions,这样您就可以使用!dumpobj 命令。这将按实例计数和大小列出 dmp 文件中的对象。如果您在使用 .loadby 时遇到问题,请告诉我。
标签: .net memory-leaks azure-web-app-service .net-framework-4.8