2011-06-14 46 views
1

我们有一个Asp.NET应用程序,它支持我们所有的服务器逻辑。 此应用程序仅适用于服务(无页面)。Asp.net内存意外膨胀

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

它意外地发生,所以我们不能真正按需求重新创建。

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

任何帮助将不胜感激。 Daniel

回答

2

​​。我相信内存分析器(它应该帮助你发现泄漏)有一个可能有用的评估版本。

一些简单的检查:

  1. 你分配任何IDisposable的对象(HttpWebRequest的,WCF的对象,任何使用非托管资源或不安全的代码),而不是他们处置?

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

1

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

如果这只是在生产环境中发生的检查了这一点:https://rpm.newrelic.com

2

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

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

在程序中有很多方法可能会泄漏内存。但是因为它在几秒钟内泄漏几个GB几乎肯定是由于代码中的循环。

所以:

  • 找出所有的循环在你的代码
  • 先看看你可以通过看它
  • 看到的问题,如果不放置日志调用,将记录每次迭代
  • 部署,并等待它发生
  • 检查日志,看看那里的跑开循环是
下一次
+0

+1代码审查 – citronas 2011-06-14 16:30:02