如何调试 Azure Web App 内存泄漏?
Posted
技术标签:
【中文标题】如何调试 Azure Web App 内存泄漏?【英文标题】:How to debug Azure Web App memory leaks? 【发布时间】:2016-07-02 01:02:45 【问题描述】:SCM 门户中有出色的 Start Profiling
按钮,非常适合 CPU。
还有一些引用Download GC Dump
按钮的来源:
https://***.com/a/27987593/647845
但这似乎不再可用。
然后是Download memory dump
按钮。
但现在我不知道如何/是否可以看到我也使用的 Type / Refcount / Size 统计信息。
在 C# Azure Web 应用程序中查找内存泄漏的推荐方法是什么?
【问题讨论】:
【参考方案1】:尝试使用 Kudu 控制台。 转至https://[sitename].scm.azurewebsites.net/support 单击分析 -> 诊断 -> 设置。确保检查内存转储 然后单击立即诊断。 这仅适用于基本计划及以上(不适用于免费计划) 一段时间后你会得到转储 使用 Visual Studio 打开下载的文件并选择“调试托管内存”。 然后您可以查看详细信息。
【讨论】:
嗨@GhandaliSamant,感谢您的回答。当我这样做时,我得到Unhandled exception at 0x0000000000000000 in w3wp_39104_8a58_2016-03-16_14-23-22-814_98c0.dmp: 0x80000007: Operation aborted.
任何想法?
让我试着回去。那没有发生在我身上。您是在哪一步收到此错误的?
该 Kudu 支持页面已被弃用。现在可以在 Azure 门户中为选定网站的“诊断和解决问题”下获取内存转储。【参考方案2】:
很遗憾,kudu 支持页面已被弃用。您现在可以在Diagnose and solve problems
下找到它:
下载转储文件后,在 Visual Studio 中打开它们并单击“收集内存转储”,例如 the accepted answer from Grandhali suggested。
【讨论】:
【参考方案3】:我看到这个帖子已经很老了,但是由于我遇到了同样的问题,并且在我想在这里发布一些更新的时间里,Azure 门户发生了很大变化。
此 Microsoft 开发人员博客快速概述了该主题:https://devblogs.microsoft.com/premier-developer/collect-and-automate-diagnostic-actions-with-azure-app-services/
我通过在 Azure 门户中导航到我的 App Service 并选择 Diagnose and solve questions 成功地进行了内存泄漏分析 然后是 诊断工具 磁贴。现在您应该会看到一个收集内存转储图块,您可以在其中通过配置 blob 存储来创建内存转储以将其保存到。
之后我下载了转储文件并使用 Visual Studio 来分析问题。
【讨论】:
【参考方案4】:您可以使用 Kudu Console 下载内存转储并使用 DebugDiag 对其进行分析,您可以拥有多个内存转储,一个在泄漏发生之前,一个在泄漏发生期间,一个在泄漏之后,稍后您可以比较并查看哪些对象是规模越来越大,却没有被丢弃
【讨论】:
【参考方案5】:从 Visual Studio 远程分析 Azure Web 应用程序可能是最佳选择。
https://azure.microsoft.com/en-us/blog/remote-profiling-support-in-azure-app-service/
【讨论】:
嗨,克里斯,感谢您的回答。该功能适用于 CPU,但似乎尚不支持内存。另请参阅 Hadmi Safa 的评论No, CPU profiles are only currently supported.
仅适用于 CPU。不支持内存以上是关于如何调试 Azure Web App 内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章