ASP.Net web-app Mem-leak调查

时间:2013-04-11 08:37:52

标签: asp.net performance memory-leaks perfview

在Asp.Net 4.0上运行的网站上调查性能问题需要建议。

网站上的一些背景

该网站是建立在电子商务框架之上的网上商店,在许多项目中证明了自己的稳定性和可靠性。网上商店已经稳定运行了一段时间(一年),但在客户将其ERP(MS Dynamics NAV)升级到更高版本后,性能问题很快就开始上升。

问题本身:

应用程序池正常启动,但因此消耗了几乎所有可用内存。所以,显然这是一个记忆漏洞的情况。

更具体的例子: 昨晚应用程序池重新启动,使用的内存大约为500兆字节。在大约16-18小时内,游泳池已经以2千兆字节左右的速度运行。该池将继续增长,直到几乎所有内存都被消耗并且应用程序变得非常慢。

应用程序池的内存快照是在池重启后使用 PerfView 进行的,也是2 Gigs的内存快照。
快照的差异如下: Heap snapshots diff between 500Mb and 2Gb

如您所见,第一行是 mscrolib!LocalDataStoreHolder 。如果我尝试打开有关它的详细信息,我可以看到以下Referred-From视图,如下所示: Referred-from view on the LocalDataStoreHolder 问题是 - 我无法打开任何这些节点以获得更深入的细节。所以目前我无法弄明白,是什么在吞噬记忆 如果它可能有任何帮助,下面是RefTree截图。在这里你可以看到强大的手柄占92.2%。 RefTree view

所以问题是 - 任何人都可以就如何深入细节提供任何提示或想法吗?如何找出导致内存泄漏的原因?

提前谢谢

编辑: 我还尝试了RedGate ANTS内存配置文件,这里有很多建议。 这是我拍摄一些内存快照之后的摘要图片,其中最新版本在20小时后完成,app-pool占用大约3.7 Gb RAM。 正如您所看到的,左侧巨大的红色块是“Unmanaged”,大小为2.5 Gb。正如ANTS所说,这可能是由CLR本身,图形数据或通过P / Invoke或COM +访问的非托管数据使用的。不过,不知道如何获得更深入的细节。 enter image description here

1 个答案:

答案 0 :(得分:1)

PerfView无法恢复64位应用程序的堆栈(您可以在原始文档中找到它)。可能你的应用程序是64位应用程序。 如果可能 - 尝试重新编译并以32位执行它。