【发布时间】: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