【问题标题】:Determining the unmanaged memory leak in Azure Web Role (Windows Azure Accelerator)确定 Azure Web 角色(Windows Azure 加速器)中的非托管内存泄漏
【发布时间】:2014-02-04 17:01:07
【问题描述】:

我们正在使用现已弃用的 Windows Azure Accelerator 将多个应用程序部署到 Windows Azure Web 角色。我们注意到 WAIISHost.exe 进程中存在大量内存泄漏 - 它目前正在消耗 2.5GB 的 RAM(在大型 Azure 实例上)。一周前,它是 1.5GB,因此可以肯定地说它每周泄漏一次。

我们查看了内存转储,似乎泄漏是非托管的 - 在 WinDBG 中使用 SOS 显示不超过 50MB 的托管堆。

我们使用了heap_stat.py WinDBG 扩展,它显示大部分分配的对象来自 nativerd dll(我相信这是一个内部基础设施库)。以下是 !py heap_stat.py -stat 揭示的内容:

统计:

                                     Type name         Count  Size
                     nativerd!SCHEMA_ATTRIBUTE       8127384  Unknown
                      nativerd!ATTRIBUTE_VALUE       8127037  Unknown
                       nativerd!SCHEMA_ELEMENT       2032263  Unknown
                       nativerd!CONFIG_ELEMENT       1112616  Unknown
                      nativerd!NAMED_ENTRY_KEY         99967  Unknown
                      nativerd!DICTIONARY_LIST         54152  Unknown
                      nativerd!DUPLICATE_TABLE         11654  Unknown

对这些对象中的任何一个运行 !heap -p -a 并没有透露太多额外信息:

0:000> !heap -p -a 000000002c1591e0

address 000000002c1591e0 found in
_HEAP @ 8d0000
          HEAP_ENTRY Size Prev Flags            UserPtr UserSize - state
    000000002c1591e0 0014 0000  [00]   000000002c1591f0    00130 - (busy)
      nativerd!SCHEMA_ELEMENT::`vftable'

此时,我们想知道调查 memleak 的后续步骤是什么。是否可以从内存转储中提取任何其他有用的信息,或者我们是否应该求助于其他方法,例如检查代码并尝试使用分析器在本地运行?

更新:我们的虚拟机运行的是 Windows Server 2008 R2 SP1。我们正在使用 Azure SDK 1.7。最后nativerd.dll的版本是7.5.7601.17855

【问题讨论】:

  • 你能找到nativerd的版本吗? lm vm nativerd
  • 可能是 KB2708071 相关:support.microsoft.com/kb/2708071 可能是缓存造成的。 NativeReader 已通过该修补程序更新到 7.0.6002.22847。
  • 我们的 VM 运行的是 Windows Server 2008 R2,因此看起来该修补程序不适用(nativerd.dll 为 7.5.7601.17855)

标签: azure memory-leaks windbg azure-web-roles


【解决方案1】:

我采用了已弃用的 Windows Azure Accelerator for Web Roles,并给予了它急需的爱。它已升级以解决您在此处指出的问题以及升级到 Windows Server 2012(目前它针对 1.8 SDK,但如果您知道自己在做什么,那么它应该可以在 2.X 上正常工作)。

您可以在这里查看:https://github.com/MRCollective/AzureWebFarm

此提交中显示了您遇到的问题的即时修复:https://github.com/MRCollective/AzureWebFarm/commit/467516c77fa23b23fa94f98deb38679cfd08663a,或者,如果您升级到 Windows Server 2012,则问题不再存在。

我们最近制作的另一个选项在这里:https://github.com/MRCollective/AzureWebFarm.OctopusDeploy

【讨论】:

  • 非常酷 - 很高兴看到 Windows Azure 加速器重获新生!就我的问题而言,我的理解是这是一个 Win2k8 R2 错误,由 KB2618982 缓解。我们将尝试部署它以查看它是否修复了泄漏。
猜你喜欢
  • 2012-01-30
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 2022-11-11
相关资源
最近更新 更多