2013-04-11 68 views
1

需要在运行于Asp.Net 4.0的网站上调查性能问题的建议。ASP.Net web-app内存泄漏调查

网站一个小背景:

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

问题本身:

应用程序池正常启动,但随后几乎消耗所有可用内存。所以,显然这是一个内存泄漏的情况。

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

应用程序池的内存快照采用PerfView在池重新启动后以及2 Gigs。快照的
DIFF在下面附: Heap snapshots diff between 500Mb and 2Gb

正如你所看到的,上面一行是mscrolib LocalDataStoreHolder!如果我尝试打开它的详细信息,我可以看到下面的Referred-From视图,如下所示: Referred-from view on the LocalDataStoreHolder 问题是 - 我无法打开任何这些节点以获取更深入的细节。所以目前我无法弄清楚,什么在吃掉记忆。
如果可能有任何帮助,以下是RefTree屏幕截图。在这里你可以看到强壮的手柄占92.2%。 RefTree view

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

预先感谢您

编辑: 我也试过展鹏蚂蚁内存配置文件,这是在不同的线程多劝这里。 下面是我拍摄一些内存快照后的总结图,最新的一个在20小时后完成,应用程序池耗尽了3.7 Gb左右的内存。 正如您所看到的,左侧巨大的红色块是“非托管”,大小为2.5 Gb。正如ANTS所说,CLR本身或图形数据或通过P/Invoke或COM +访问的非托管数据可能会用掉它。不过,不知道如何获得更深的细节。 enter image description here

回答

1

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

+1

看我上面的编辑,用蚂蚁探查器查看 – Trogvar 2013-04-12 10:56:14