我们有一个Asp.NET应用程序,它包含我们所有的服务器逻辑。 此应用程序仅适用于服务(无页面)。
经过一段时间后,w3wp.exe进程内存消耗趋于膨胀。 它可以在几秒钟内增长到最大可用容量(在我的服务器中可达10千兆字节)。
它意外发生,因此我们无法按要求重新创建。
我需要一些帮助来调试此问题。 有谁知道我可以使用的好工具?也许是我可以告诉他们在进程达到内存消耗时转储内存或拍摄快照。
任何帮助将不胜感激。 丹尼尔
答案 0 :(得分:2)
Red Gate makes some very nice .NET profiling tools。我相信内存分析器(应该可以帮助你找到泄漏)有一个可能有用的eval版本。
要检查一些简单的事情:
您是在分配任何IDisposable对象(HttpWebRequest,WCF对象,使用非托管资源或不安全代码的任何东西)而不是处理它们?
您是否有任何可能尝试将整个非常大的表加载到RAM中的查询? (不太可能)检查操作SQL结果的任何LINQ代码周围的内存使用情况。
答案 1 :(得分:2)
这里有很多关于调试的好答案。
解决问题的另一种方法是使用代码审查。
内存可以通过多种方式泄漏到程序中。但是,几秒钟内几秒肯定是由于你的代码中出现了一个循环而导致几GB泄漏。
所以:
答案 2 :(得分:1)
如果您可以在开发环境中实现它,那么您应该能够使用Visual Studio的内置分析工具来跟踪问题。
如果只在生产环境中发生这种情况,请查看:https://rpm.newrelic.com
答案 3 :(得分:0)
Tess Ferrandez的博客是调试ASP.NET的绝佳资源:
有多种方法可以捕获可以使用WinDbg和SOS脱机检查的内存转储: