【问题标题】:Memory problems in ASP.NETASP.NET 中的内存问题
【发布时间】:2022-02-08 17:08:42
【问题描述】:

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

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

我完全没有追踪内存泄漏的经验。 :)

谢谢

【问题讨论】:

  • 这不一定是内存泄漏。

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


【解决方案1】:

使用 RedGate 内存分析器的试用版

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/

这两个工具都非常简单易用,并且在识别潜在的内存泄漏等方面做得很好。

最常见的泄漏源是错过 dispose 调用,或事件处理程序管理不善......根据代码库的大小,您可能只能“发现”问题点,但我发现使用工具大大加快了进程,因为两者都会在对象图的快照之前/之后呈现,因此您可以看到 GC 正在清理和未清理的内容。

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

【讨论】:

  • +1。 RedGate 的内存分析器是一个不错的工具。也为了指向内存管理的概述。
【解决方案2】:

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

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

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

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

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

【讨论】:

  • +1,别忘了它可能只是内存使用(即大量使用SessionApplication状态,操作非常大的数据集在构建 Page 实例等时),而不仅仅是泄漏。
  • 没错。太糟糕了,我无法通过投票给你的评论来给你积分。
【解决方案3】:

这本身不一定是您问题的答案,而更多的是关于如何追踪此类事情的建议。

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

【讨论】:

    【解决方案4】:

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

    500 MB 奇数内存对我来说似乎相当少,因此内存可能会增加您的问题。如果是 503 错误,则表示您已从崩溃的角度解决问题。 Link

    如果您遇到内存问题,通常会出现内存不足异常,在这种情况下,您应该对进程 (w3wp.exe) 进行多次内存转储并对其进行分析。 Link 有很多关于如何分析内存转储以查找内存泄漏的帖子。现在,将其称为内存泄漏还为时过早。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-28
      • 2011-01-11
      • 2011-06-03
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多