Asp.net内存意外膨胀

问题描述

我们有一个保存所有服务器逻辑的Asp.NET应用程序。 此应用程序仅容纳服务(无页面)。 一段时间后,由于某种原因,w3wp.exe进程的内存消耗趋于膨胀。 它可以在几秒钟内增长到可用的最大大小(在我的服务器中为10 GB)。 它出乎意料地发生,因此我们无法真正按需重新创建。 我需要一些调试此问题的帮助。 有谁知道我可以使用的好工具?也许我可以告诉我在进程达到某些内存消耗时转储内存或拍摄快照。 任何帮助将不胜感激。 丹尼尔     

解决方法

        Red Gate提供了一些非常不错的.NET分析工具。我相信内存分析器(应该可以帮助您发现泄漏)具有一个可能有用的评估版本。 一些简单的检查事项: 您是否正在分配任何IDisposable对象(HttpWebRequest,WCF对象,使用非托管资源或不安全代码的任何对象)并且不处理它们? 您是否有任何查询可能试图将整个非常大的表加载到RAM中? (不太可能)检查处理SQL结果的任何LINQ代码周围的内存使用情况。     ,        关于调试,这里有很多很好的答案。 解决该问题的另一种方法是使用代码审查。 内存可以通过多种方式在程序中泄漏。但是几乎可以肯定的是,由于几秒钟的代码循环,它在几秒钟内泄漏了几个GB。 所以: 识别代码中的所有循环 首先看一下是否可以看到问题 如果没有,则发出将记录每次迭代的日志记录调用 部署并等待下一次发生 检查日志以查看失控循环的位置     ,        如果可以在开发环境中实现,那么您应该能够使用Visual Studio的内置分析工具来跟踪问题。 如果仅在生产环境中发生这种情况,请查看以下内容:https://rpm.newrelic.com     ,        Tess Ferrandez的博客是调试ASP.NET的好资源: http://blogs.msdn.com/b/tess/archive/tags/memory+issues/ http://blogs.msdn.com/b/tess/archive/2008/04/03/net-debugging-demos-lab-7-memory-leak-review.aspx 有多种捕获内存转储的方法,您可以使用WinDbg和SOS脱机检查它们: http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/06/17/how-to-capture-a-minidump-let-me-count-the-ways.aspx     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...