我们有一个Asp.NET应用程序,它支持我们所有的服务器逻辑。 此应用程序仅适用于服务(无页面)。Asp.net内存意外膨胀
由于某些原因,经过一段时间w3wp.exe进程内存消耗趋于膨胀。 它可以在几秒钟内增长到可用的最大尺寸(在我的服务器中最高可达10千兆字节)。
它意外地发生,所以我们不能真正按需求重新创建。
我需要一些帮助来调试这个问题。 有谁知道我可以使用的好工具?也许我可以告诉转储内存或当进程达到内存消耗时拍摄快照。
任何帮助将不胜感激。 Daniel
我们有一个Asp.NET应用程序,它支持我们所有的服务器逻辑。 此应用程序仅适用于服务(无页面)。Asp.net内存意外膨胀
由于某些原因,经过一段时间w3wp.exe进程内存消耗趋于膨胀。 它可以在几秒钟内增长到可用的最大尺寸(在我的服务器中最高可达10千兆字节)。
它意外地发生,所以我们不能真正按需求重新创建。
我需要一些帮助来调试这个问题。 有谁知道我可以使用的好工具?也许我可以告诉转储内存或当进程达到内存消耗时拍摄快照。
任何帮助将不胜感激。 Daniel
。我相信内存分析器(它应该帮助你发现泄漏)有一个可能有用的评估版本。
一些简单的检查:
你分配任何IDisposable的对象(HttpWebRequest的,WCF的对象,任何使用非托管资源或不安全的代码),而不是他们处置?
您是否有任何查询可能试图将整个非常大的表加载到RAM中? (不太可能)检查任何处理SQL结果的LINQ代码的内存使用情况。
苔丝Ferrandez的博客是调试ASP.NET一个很好的资源:
有多种方法来捕获内存转储,您可以检查与WinDbg和SOS脱机:
如果您可以在开发环境中实现它,那么您应该能够使用Visual Studio的内置分析工具来追踪问题。
如果这只是在生产环境中发生的检查了这一点:https://rpm.newrelic.com
这里有很多很好的答案上调试。
解决该问题的另一种方法是使用代码审查。
在程序中有很多方法可能会泄漏内存。但是因为它在几秒钟内泄漏几个GB几乎肯定是由于代码中的循环。
所以:
+1代码审查 – citronas 2011-06-14 16:30:02