如何调试 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 内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章

调试快速应用程序中的内存泄漏

如何结合调试 Azure 应用服务和 IIS 托管的 WCF?

Linux如何调试内存泄漏

Linux如何调试内存泄漏

iphone App中的内存泄漏

Android App解决卡顿慢之内存抖动及内存泄漏(发现和定位)