应用程序池回收时奇怪的内存增加

时间:2010-12-14 07:32:16

标签: asp.net memory recycle

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

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

重要的是我在测试环境中无法重现这种行为。有时,我一直从提供商管理员处获得我的应用程序使用的资源多于允许的资源,这真的让我感到烦恼。

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

由于

1 个答案:

答案 0 :(得分:0)

这篇文章很好地概述了当您的网站的应用池被回收时会发生什么: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或更可配置的托管服务,您可以为更高的内存限额支付额外费用。