【问题标题】:Weird memory increase on application pool recycle应用程序池回收时奇怪的内存增加
【发布时间】:2011-05-25 02:59:28
【问题描述】:

我想描述一下我在分析生产中的 asp.net 应用程序时注意到的奇怪问题,并就以下问题征求一些建议或意见。

应用程序通常使用大约 80-90 MB 的内存占用空间运行。这似乎很稳定,因为到目前为止还没有检测到内存泄漏——随着时间的推移内存使用量没有轻微增加。然而,当应用程序池回收时会出现问题(我正在使用共享主机并通过日志判断它发生在应用程序空闲 20 分钟或每 ~ 30 小时 - 类似的事情)。问题是在回收的一段时间内,已用内存几乎翻了一番——它达到了大约 160-170 MB,没有任何解释。这很令人困惑,因为通常声称回收应该清除内存和所有其他资源 - 至少我是这样理解的。系统将这个内存量保持 7-8 小时,然后内存使用量再次下降到通常的 90-100 MB 水平,没有明显的原因(至少我不知道)。一直以来,应用程序似乎运行良好 - 没有明显的延迟或站点可用性问题 - 对用户来说一切似乎都很好,到目前为止没有任何投诉。查看随时间变化的内存消耗图 - 它看起来几乎像一个阶跃函数。

重要的是我无法在我的测试环境中重现这种行为。有时,我从提供商管理员那里收到通知,说我的应用程序使用的资源超出了允许的范围,这真的让我很烦恼。

那么,我想知道的是——是否存在应用程序池回收不会释放所有内存资源的情况?有什么我应该关注的建议或指导吗?我不是这方面的专家,但我一直在阅读诸如重叠回收、回收序列化问题以及更多问题等内容......有什么想法吗?类似的经历?

谢谢

【问题讨论】:

    标签: asp.net memory recycle


    【解决方案1】:

    这篇文章很好地概述了当您网站的应用程序池被回收时会发生什么:http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx

    我的猜测是,由于每次应用程序池回收后都会进行 JIT 编译,您的内存使用量正在增加。我的猜测是您的共享主机的配置和环境设置与您的开发服务器不同。

    恕我直言,如果您在共享主机上使用约 100 兆的内存,那么如果它是像 DiscountASP.NET 或 GoDaddy 这样的主机,您就是在自找麻烦。如果您完全关心该网站,请购买 VPS 或更多可配置的主机,您可以在其中支付更高的内存限制。

    【讨论】:

    • 回收应用程序池不会进行 JIT 编译。反之亦然,如果有重新编译,它将回收应用程序池。
    猜你喜欢
    • 1970-01-01
    • 2011-03-06
    • 2015-01-07
    • 2011-08-31
    • 2011-09-20
    • 2016-06-13
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    相关资源
    最近更新 更多