在调查在 Asp.Net 4.0 上运行的网站上的性能问题时需要建议。
网站上的一点背景:
该网站是一个建立在电子商务框架上的网上商店,已在许多项目中证明了自己的稳定性和可靠性。Webshop 已经稳定运行了很长一段时间(一年),但是在客户将他们的 ERP(MS Dynamics NAV)升级到更高版本后,性能问题很快就开始上升。
问题本身:
应用程序池正常启动,但会消耗几乎所有可用内存。所以,显然这是一个内存泄漏的情况。
更具体的例子:昨晚重新启动应用程序池,使用的内存约为 500 兆字节。在大约 16-18 小时内,该池已经以大约 2 GB 的速度运行。池将继续增长,直到几乎所有内存都被消耗并且应用程序变得非常缓慢。
应用程序池的内存快照是在池重新启动后和 2 Gig 时使用PerfView拍摄的。
快照的差异附在下面:
如您所见,第一行是mscrolib!LocalDataStoreHolder。如果我尝试打开有关它的详细信息,我可以看到以下引用来源视图,如下所示:
问题是 - 我无法打开这些节点中的任何一个以获取更详细的信息。所以目前我无法弄清楚,是什么吞噬了记忆。
如果它可能有任何帮助,下面是 RefTree 屏幕截图。在这里,您可以看到强句柄占 92.2%。
所以问题是 - 任何人都可以提供任何关于如何深入细节的提示或想法吗?如何找出导致内存泄漏的原因?
先感谢您
编辑:我还尝试了 RedGate ANTS 内存配置文件,这在此处的各种线程中得到了很多建议。这是我拍摄了一些内存快照后的摘要图片,最新的一张在 20 小时后完成,应用程序池占用了大约 3.7 Gb 的 RAM。如您所见,左侧巨大的红色块是“Unmanaged”,大小为 2.5 Gb。正如 ANTS 所说,这要么被 CLR 本身用完,要么被图形数据用完,要么被通过 P/Invoke 或 COM+ 访问的非托管数据。不过,不知道如何获得更深入的细节。