查找在asp.net中泄漏内存的页面

时间:2013-08-26 06:17:08

标签: asp.net sql memory-leaks

我正在使用redgate内存分析器来查找内存泄漏。但是这个软件只显示系统类。我想找到创建问题的页面,请帮助

1 个答案:

答案 0 :(得分:1)

在分析ASP.NET网站时,您会看到许多系统类,因为IIS在幕后做了很多工作,但ANTS Memory Profiler当然不仅仅仅限于显示系统类

您拥有源代码的类在类列表中以粗体突出显示,您还可以使用过滤仅显示您拥有源的类。如果您没有源,但仍希望突出显示特定命名空间中的类(例如,在您的情况下,任何不在系统中的类),您可以通过选择按命名空间分组来实现。

The class list showing only classes with source

ANTS向您显示在拍摄内存快照时保存在内存中的对象。如果类列表显示内存中没有您的类,那是因为它们不在那个时间点。

您没有提供任何信息,因此很难在您的具体案例中提供更多指导,但总的来说:

  • 您确实遇到了内存问题吗?使用ANTS时间轴上的性能计数器来查看使用应用程序时的内存使用情况。如果它没有上升,也许你没有问题。

  • 确保您在合适的时间拍摄快照。这是最难对付的事情之一。首先,您需要确保网站已正确“预热”。如果你看一下网站上第一页点击的行为,你将不会看到正常的应用程序行为,因为诸如设置连接的一次性开销,未使用的缓存等等。一旦网站被加热起来,拍摄基线快照。接下来,以您期望可能导致问题的方式使用应用程序,然后再拍摄另一个快照。 ANTS比较两个快照之间的内存使用情况,特别显示哪些类在快照之间使用了更多内存。然后重复您的操作(以相同的方式使用您的网站,然后拍摄另一张快照),并寻找类似的增加。

  • 找出增加的原因。一旦确定了一些似乎存在问题的内容,请使用实例保留图来了解导致该对象的引用链在记忆中举行。

诊断ASP.NET内存泄漏的一个常见问题是,只泄漏非常少量的内存,但经常这样做,例如在每次页面加载时。站点在开发环境中可能看起来很好,但在生产中加载时会失败。一个有用的启动方法可以是使用负载生成工具(您可以从IIS6附带的免费tinyget工具开始,或者如果您拥有它们,则使用更复杂的负载测试),并在这些条件下分析应用程序的性能。对生产进行分析是一种风险措施,只能作为绝对的最后手段来进行。