IIS 工作进程占用了我们服务器上的大量内存。我想限制每个应用程序可以使用的内存。我不知道是否应该设置虚拟内存限制或私有内存限制。我们 IIS 中的每个应用程序都有自己的应用程序池。
如果我将私有内存限制设置为 500MB,将虚拟内存限制设置为 3GB。应用程序池何时回收?是在达到 500MB 后回收,还是在达到 3GB 后回收。
答案1
IIS 将尊重这两个限制。
如果您设置了 500MB 的私有字节限制,那么一旦工作进程尝试提交 501MB,IIS 就会启动一个新的工作进程并终止旧进程。
如果您设置了 3GB 的虚拟内存限制,那么一旦工作进程试图保留 3.001GB,IIS 就会启动一个新的工作进程并终止旧进程。
如果您使用的是 64 位平台,您应该知道 ASP.NET 应用程序会积极保留虚拟内存。例如,我在农场上有一个应用程序,它只使用 88MB 的专用字节,但它现在的虚拟大小为 5.4GB。我相信虚拟内存预留是服务器上物理 RAM 的功能。同样重要的是要了解,在 64 位平台上,保留大量虚拟内存不会对性能产生任何影响。
基本上,如果您在 IIS 服务器上遇到内存消耗问题,您想要限制的设置是私有内存/字节,这是与实际内存使用情况相对应的。
答案2
我想补充一下 Dominic 的旧回答,在 64 位池中,您确实需要小心分配虚拟内存。我曾看到 IIS 工作进程试图立即获取 22gb,而这正是我们试图将其设置为的值,因此应用程序池每分钟都会崩溃。MS IIS 最佳实践表明不应设置这些设置,但 DISA STIG 表明您必须设置它们。有趣的时光。
VS DISA V-76869 必须设置应用程序池使用的虚拟内存量。
V-76871 必须设置应用程序池使用的私有内存量。