我想描述一下我在分析生产中的 asp.net 应用程序时注意到的奇怪问题,并就以下问题征求一些建议或意见。
应用程序通常运行大约 80-90 MB 的内存占用。这似乎很稳定,因为到目前为止还没有检测到内存泄漏 - 随着时间的推移内存使用量没有轻微增加。然而,当应用程序池回收时会出现问题(我正在使用共享托管并根据日志判断它发生在应用程序空闲 20 分钟或每 ~ 30 小时 - 类似的情况)。问题是在回收的一段时间内,已用内存几乎翻了一番——它达到了大约 160-170 MB,没有任何解释。这是令人困惑的,因为通常声称回收应该清除内存和所有其他资源 - 至少我是这样理解的。系统将这个内存量保持 7-8 小时,然后内存使用量再次下降到通常的 90-100 MB 水平,没有明显的原因(至少我不知道)。每时每刻,应用程序似乎运行良好 - 网站可用性没有明显的延迟或麻烦 - 对用户来说一切似乎都很好,到目前为止没有任何投诉。查看随时间变化的内存消耗图 - 它看起来几乎像一个阶跃函数。
重要的是我无法在我的测试环境中重现这种行为。有时,我收到供应商管理员的通知,说我的应用程序使用的资源超出了允许的范围,这真的让我很烦恼。
那么,我想知道 - 是否存在应用程序池回收不会释放所有内存资源的情况?有什么我应该关注的建议或指导吗?我不是这方面的专家,但我一直在阅读诸如重叠回收、回收序列化问题以及更多问题等内容......有什么想法吗?类似的经历?
谢谢