我们正在运行一些 X64 Win Server 2012 网络服务器(所以 IIS 8)。
我们注意到盒子上的空闲内存一直处于 5-10% 的空闲状态。我们实际上在这些机器上运行了相当多的应用程序(13 个站点,超过 13 个应用程序池的 80 个应用程序)。每个站点的大部分代码都是重复的,因为它们对应于不同的数据库和物理站点,但应用程序是相同的。
我们非常确信我们在应用程序中存在内存泄漏,因为内存一直在增长,所以我们正在直接关注这一点,但我对 IIS 的内存分配和管理感到困惑。我想知道 IIS 8 或 x64 服务器是否有任何不同(我们最近刚搬到 x64)。
所以基本上我们的每个网络服务器都有 6GB 的内存,并且有 5-10% 的可用内存。我们确定泄漏的最高应用程序使用了高达 1.2GB 的内存。下一个大约是 800MB,其余的平均大约为 400-500MB(所有这些值都是私有内存,如任务管理器中所见)正如我所说,代码是重复的,所以如果一个站点存在泄漏,它将在所有站点中他们,只是不同的物理位置可以打开或关闭某些功能,这解释了巨大的差异。
当我们解决问题时,我们决定只增加内存,这样我们就不会遇到问题。所以昨晚我关闭了每台服务器并将内存翻倍至 12GB。今天早上,3 台服务器的内存使用率分别为 77%、80% 和 82%。所有进程的内存使用量都增加了 1.5-2 倍。
所以现在我很困惑。真的是内存泄漏吗?或者是否有某种内存预分配?或者它永远不会释放内存,除非另一个进程请求它一个 SQL Server 或什么?
如果当内存翻倍时它们突然变得如此巨大,那么将内存级别保持在 6GB 的原因是什么?是否设置了阈值?IIS/ASP 是否只是在内存不足或什么的情况下才进行垃圾收集?
任何答案表示赞赏。