Asp.net内存意外膨胀

时间:2011-06-14 14:53:52

标签: asp.net iis memory-leaks

我们有一个Asp.NET应用程序,它包含我们所有的服务器逻辑。 此应用程序仅适用于服务(无页面)。

经过一段时间后,w3wp.exe进程内存消耗趋于膨胀。 它可以在几秒钟内增长到最大可用容量(在我的服务器中可达10千兆字节)。

它意外发生,因此我们无法按要求重新创建。

我需要一些帮助来调试此问题。 有谁知道我可以使用的好工具?也许是我可以告诉他们在进程达到内存消耗时转储内存或拍摄快照。

任何帮助将不胜感激。 丹尼尔

4 个答案:

答案 0 :(得分:2)

Red Gate makes some very nice .NET profiling tools。我相信内存分析器(应该可以帮助你找到泄漏)有一个可能有用的eval版本。

要检查一些简单的事情:

  1. 您是在分配任何IDisposable对象(HttpWebRequest,WCF对象,使用非托管资源或不安全代码的任何东西)而不是处理它们?

  2. 您是否有任何可能尝试将整个非常大的表加载到RAM中的查询? (不太可能)检查操作SQL结果的任何LINQ代码周围的内存使用情况。

答案 1 :(得分:2)

这里有很多关于调试的好答案。

解决问题的另一种方法是使用代码审查。

内存可以通过多种方式泄漏到程序中。但是,几秒钟内几秒肯定是由于你的代码中出现了一个循环而导致几GB泄漏。

所以:

  • 识别代码中的所有循环
  • 首先看看你是否能看到问题
  • 如果没有记录将记录每次迭代的记录调用
  • 部署并等待下次发生
  • 检查日志以查看逃跑循环的位置

答案 2 :(得分:1)

如果您可以在开发环境中实现它,那么您应该能够使用Visual Studio的内置分析工具来跟踪问题。

如果只在生产环境中发生这种情况,请查看:https://rpm.newrelic.com

答案 3 :(得分:0)