【问题标题】:ASP.Net web-app Mem-leak investigationASP.Net web-app Mem-leak 调查
【发布时间】:2013-04-11 08:37:51
【问题描述】:

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

网站背景介绍

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

问题本身:

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

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

应用程序池的内存快照是在池重新启动后使用 PerfView 以及在 2 Gigs 时拍摄的。
快照的差异附在下面:

如您所见,第一行是 mscrolib!LocalDataStoreHolder。如果我尝试打开有关它的详细信息,我可以看到以下引用来源视图,如下所示: 问题是 - 我无法打开这些节点中的任何一个以获得更深入的细节。所以目前我无法弄清楚,是什么占用了内存。
如果它可能有任何帮助,下面是 RefTree 屏幕截图。在这里,您可以看到强句柄占 92.2%。

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

提前谢谢你

编辑: 我还尝试了 RedGate ANTS 内存配置文件,这在此处的各种线程中得到了很多建议。 这是我拍摄了一些内存快照后的摘要图片,最新的一张在 20 小时后完成,应用程序池占用了大约 3.7 Gb 的 RAM。 如您所见,左侧巨大的红色块是“Unmanaged”,大小为 2.5 Gb。正如 ANTS 所说,这要么被 CLR 本身用完,要么被图形数据用完,要么被通过 P/Invoke 或 COM+ 访问的非托管数据。不过,不知道如何获得更深入的细节。

【问题讨论】:

    标签: asp.net performance memory-leaks perfview


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-10-04
      • 2014-02-22
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 2020-01-09
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多