ASP.NET中的内存问题

时间:2010-11-12 17:19:44

标签: asp.net memory-leaks memory-management

我的asp.net应用程序中存在内存问题。问题是我在本地运行它(100-200mb之间)时看不到任何问题,但在生产系统上,由于达到内存限制(512mb)(在共享主机上运行它),我得到503错误。 / p>

如何确定问题?我不认为我可以访问当前的内存使用情况,至少我没有找到任何办法,并且托管我网站的公司说没有办法。

我绝对没有追踪内存泄漏的经验。 :)

由于

4 个答案:

答案 0 :(得分:3)

使用RedGate的Memory Profiler试用版

http://www.red-gate.com/products/ants_memory_profiler/index.htm?utm_source=google&utm_medium=cpc&utm_content=unmet_need&utm_campaign=antsmemoryprofiler&gclid=CJLijJblm6UCFQqAgwodHjokHg

或JetBrains dotTrace

http://www.jetbrains.com/profiler/

这两种工具都非常简单易用,可以很好地识别潜在的内存泄漏等。

最常见的泄漏源是错过处置呼叫,或者事件处理程序管理不善......根据代码库的大小,您可能只能“发现”故障点,但我发现使用工具大大加快了这个过程,因为它们都会在对象图的快照之前/之后出现,这样你就可以看到GC清理了什么和没有清理过。

内存管理的良好概述: http://msdn.microsoft.com/en-us/library/ee817660.aspx

答案 1 :(得分:1)

我不知道这在这里是完全可以回答的,但是这里有一个开始...其他答案正在解决特定的内存问题,但是,首先,您需要了解内存的分配和释放方式(保留,使用)并且由计算机,.NET运行时以及您的程序发布。

然后,您需要充分理解您的代码,以了解每个用户基础上发生的功能,并查看正在使用的内存量。从那里,您可以进入代码并追踪问题,但您需要对基础知识有一个坚定的了解。

如果我是你,我会从这篇文章开始,并计划花更多时间研究和学习。可悲的是,这篇文章不仅会回答问题,还会提供足够的知识来提出更具体/更好的问题。这是一篇很好的文章,我相信它会对你有所帮助,但它不是整个kit-n-kaboodle。有很多东西需要学习。

http://msdn.microsoft.com/en-us/magazine/cc188781.aspx

这篇文章有点陈旧,我假设你正在使用更新的工具,所以当你完成这篇文章的消化后,跳转到http://msdn.microsoft.com/en-us/library/ms182372.aspx以了解Visual Studio Profiler。

答案 2 :(得分:0)

首先要做的事情...... 503不仅仅是因为记忆。如果您的应用程序在5分钟内崩溃5次,由于快速失败,应用程序池将关闭,您将获得503 - 服务不可用错误。

500 MB奇怪的内存对我来说似乎相当少,因此,内存可能会增加你的问题。如果它是503错误,则表示您从崩溃角度解决了问题。 http://blogs.msdn.com/b/rahulso/archive/2006/03/02/what-is-a-crash-technically-in-asp-net-and-what-to-do-if-it-happens.aspx

如果您遇到内存问题,通常会出现内存不足异常,在这种情况下,您应该对进程进行多次内存转储(w3wp.exe)并进行分析。 http://blogs.msdn.com/tess有许多关于如何分析内存转储以进行内存泄漏的帖子。现在,你把它称为内存泄漏还为时过早。

答案 3 :(得分:0)

这不一定是你的问题的答案本身,但更多的是关于如何追踪这样的事情的建议。

我发现有助于追踪这些问题的一件事是在应用程序中构建某种仪器。它可以像提供各种缓存一样简单,以跟踪页面请求持续时间。这可以通过创建静态缓存类来实现,以保存所有(不推荐)或只是您定义的长时间运行的请求(更安全的方法)并在OnBegin和OnEnd事件中触发它(HTTP模块将是理想的)。然后,您可以创建一个基本的仪表板页面,列出缓存的内容,以查看可能存在问题的地方。