我需要在 IIS 应用程序池中配置几个非默认设置,但我没有找到很好的指导,也没有在反复试验中获得太多运气。
我有两个正在使用的应用程序池。一个托管单个应用程序,另一个托管两个。这些应用程序用于支持我们办公室的日常工作,是 TFS 的本地实例,用户可以通过网站或本地 Visual Studio 客户端访问。该机器是虚拟 Windows 主机,最大 RAM 为 16GB,常规使用量在 10.5GB 左右。
这些值是回收请求限制、私有内存限制和虚拟内存限制。
这三个的默认值都是“0”,表示“无限制”。这是不允许的。
到目前为止,似乎每当我在相关字段中设置任何值时,TFS 的性能都会下降。它仍然可以访问,但速度明显变慢了。
对于内存限制,我在网上找到一些指导意见,说应用程序通常只应使用 1.6GB 左右的内存,因此我开始尝试将两个池的限制都设为 2GB。这个方法效果不佳,因此我不断增加内存限制,直到我为两个池提供的最大限制为 16GB(以 kb 表示,即 16777216kb)。私有内存限制和虚拟内存限制中使用的数量保持不变,因为似乎没有任何迹象表明它们应该分开。
回收的请求限制,另一个不能再为“0”的值,被设置为 35000 - 显然,这是 IIS 6.5 的“最佳实践”。
我不确定性能下降的原因。在我看来,这些配置更改阻止了 IIS 应用程序获取所需的所有内存,导致它们陷入停滞状态。但是,我显然允许相关应用程序使用 16GB - 这肯定与“0”相同,因为这是它们在 16GB RAM 托管 VM 上从“无限制”设置中能够获取的最大内存。
将内存限制设置回“0”可提高性能,将请求限制设置回原位可进一步提高性能。
奇怪的是,无论这些设置如何,机器内存使用情况似乎都不会发生变化。
不幸的是,我不知道如何正确配置它,因为相关要求没有规定。除了找到关于设置多少数量的建议之外,我还找不到关于如何自己解决这个问题的具体资源——也就是说,我可以手动输入别人的值,但不清楚我应该如何查看自己的应用程序并根据某个已知值得出结果。我确实知道 w3wp 进程是一个管理应用程序池的 IIS 工作进程——但它似乎只需要大约 228,000K 的峰值——无论如何,根据任务管理器。
我应该如何配置这些内存处理设置,以及我应该基于什么做出该决定?我不确定为什么如果我为其提供系统上的最大内存量(16GB),其性能会比我为其提供无限量的内存(这本身无论如何都会受到系统 16GB 内存限制的限制)时要差。
答案1
最好不要改变这些设置,除非有需要解决的重大问题 - 请参阅: https://techcommunity.microsoft.com/t5/core-infrastructure-and-security/iis-best-practices/ba-p/1241577
答案2
将虚拟内存限制设置为 0 以外的任何值似乎会导致 iis 10 64 位出现重大问题。为了遵守要求使用非 0 值的规则,我发现将限制设置为允许的最大值 4294967295似乎与设置为 0(无限制)一样有效