我有 Windows Server 2008 SP2 EE x86,内存为 6GB。IIS7 上有 10 个应用程序池在运行。所有 10 个应用程序池和每个应用程序池分别可以使用多少内存?我的应用程序抛出 OutOfMemoryExceptions 的极限是多少?
那么,监控 IIS7 应用程序池的性能和可用的免费服务器资源的最佳方法是什么?我尝试使用默认性能监视器和按索引标识的进程 (专用字节、虚拟内存、工作集) 的性能计数器,但我无法将这些计数器实时链接到当前应用程序池。
答案1
每个应用程序池最多可使用 2GB 的私有地址空间,除非您使用过 3GB 等 BCDEDIT 选项。
如果所有 10 个都尽可能使用了 2GB,那么您将陷入分页地狱。
您的问题一般是关于进程如何在 Windows 上分配内存 - 我会向您提供一些术语以供进一步研究。
专用字节 - 这是专门分配给该进程的内存量 虚拟字节 - 这是该进程分配的内存总量 工作集 - 这是该进程实际使用的 RAM 量
保留内存 - 指定供应用程序使用的内存,但实际上尚未获得 RAM/页面文件支持;已提交内存 - 具有支持的内存
现在,当您添加 .Net 等应用框架时,问题变得更加复杂 - 在发生 OutOfMemoryExceptions 之前,.Net 的可工作最大值低于 2GB。并且通常,根据我的经验,它们不会发生在没有泄漏或负载超出其处理能力的应用程序上。
带有进程计数器的 Perfmon 通常就是您对应用程序池所能做的一切;您可以启用将 PID 放在进程名称中的选项(如果有帮助),并定期使用 APPCMD LIST WP 来记录哪个应用程序池正在做什么。