IIS/Windows 2008 R2 中的 .Net OutOfMemoryExceptions 在被命中的应用程序的随机页面上抛出的奇怪情况。
我们有大约 1000 个单独的站点,它们是相同的 .Net 应用程序(每个站点有不同的代码库文件夹和应用程序池)。64 位 Windows 并运行 .Net 2.0,应用程序使用“AnyCPU”标志编译。
由于相同的代码可以在旧服务器上运行并且永远不会抛出内存不足异常,因此我们推迟了花费大量时间来分析应用程序和检查转储以及执行有助于避免大对象堆碎片的代码优化(因此我们希望得到一些提示在可能的服务器配置问题上,这可能是罪魁祸首,而不是查看代码库并对其进行优化......)。
配置 1 - Rackspace CloudSites(共享主机,我们只能通过 FTP 访问它,不能访问 IIS 设置):
1 个 IIS 服务器,我们无法控制管理它,但被告知每个应用程序池有 250MB 的回收限制。在我们的 1000 个站点中,许多站点(20-50 左右)显然共享相同的应用程序池。我们从来没有在这里遇到过 OutOfMemoryExceptions 并且多年来一直在其上运行应用程序。
配置 2 - Rackspace 专用服务器(完全控制):
拥有 128GB RAM 的 Monster 服务器,专用,每个站点都有自己的应用程序池。所有应用程序池都具有相同的设置(350MB 回收限制)。不确定这是否有影响,但此服务器上的页面文件大小为 4GB(不知道 Config 1 有什么 - 这是否需要增加/解决?)。
两个配置都在 2 或 3 个 Web 服务器之间进行负载平衡,但这本身并不重要,因为我们看到的站点没有流量,因为 OutOfMemoryExceptions 被杀死。