我在 Windows 2008 Server 上托管了 < 20 个 asp 经典网站。所有网站都在我的自定义 CMS 上运行。我正在从 2003 服务器迁移它们。
当这些网站在 2003 年托管时,内存也是一个问题,但并没有那么严重。
在 2008 服务器上,当访问者访问我的任何站点上的任何页面时,服务器会消耗大约 30 MB 的专用字节和 40 MB 的工作集 RAM。这是针对每个页面的。1 个访问者,1 个页面。
如果不经常进行回收,该场地实际上就会被锁定。
我相信问题在于我的 CMS 中 #includes 太多了(我已经成功测试了这个理论),并且我相信 IIS 正在缓存整个内容。
我可以限制 w3wp.exe 在缓存这些页面时消耗的内存量,甚至完全关闭缓存吗?我尝试过 IIS 中的设置,除了设置回收内存限制外,我无法更改 w3wp.exe 为每个应用程序池使用的内存量。
频繁回收是不可取的。
我将非常感激所有帮助。
答案1
您的意思是超出 W3WP 的基线内存使用量吗?对于“预热池”请求,30/40MB 是一个听起来很正常的数字。
仅仅因为 1 个用户、1 个页面使用 30/40MB 并不意味着该页面的 20 个用户会使用更多。ASP 有一些启动开销,这些开销会分摊到该页面/站点的所有用户身上。
这些应用程序都是不同的网站吗?您是否尝试过将它们合并到更少的应用程序池中(可能在 IIS 6 中就是这种情况?)
您可以以 32 位形式运行应用程序池以限制其内存使用,但您无法指定它们所受的实际限制,只能指定它们回收的点(这取决于您的应用程序框架)。
您可以研究使用 WSRM 来限制内存,但修复代码或查找导致行为改变的选项是更好的选择。