1

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

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

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

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

谢谢

4

1 回答 1

0

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

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

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

于 2010-12-14T07:51:52.990 回答