回顾为每个网站/应用程序创建单独的IIS应用程序池

fra*_*lic 10 asp.net iis application-pool

目前,在我们的生产IIS Web场中,我们在一个应用程序池(默认应用程序池)中托管了大约15个应用程序.有两个网站和大约13个虚拟目录.

一位同事建议我们更改我们的IIS配置,以便每个应用程序都是一个单独的应用程序池(具有相同的设置).

这样做有任何缺点或潜在问题吗?是否有可能构建ASP.NET应用程序的要求是它们都在同一个应用程序池中?

Nar*_*man 7

我怀疑他们是否考虑到了这个要求,除非他们出于某种原因依赖共享内存.否则,对于描述的场景......

优点(独立的应用程序池):

  • 进程隔离(一次崩溃不会导致其他崩溃)
  • 减少资源争用
  • 更多可用于进程内会话的内存,缓存

缺点:

  • 更多进程,内存和上下文切换
  • 共享缓存方案不再可用*

*我不确定.NET如何在与HttpRuntime缓存相关的同一个应用程序池中隔离网站; 对于Sessions,"应用程序唯一性"(1)由以下因素确定:

  • 所有服务器上的物理路径(区分大小写)
  • 机器钥匙
  • 实例ID
  • 批准

例如,这就是阻止您在同一个应用程序池中跨不同网站共享会话的原因; 但是,共享缓存数据可能更容易.总的来说,讨论与为特定应用部署Web Garden的优缺点重叠(2).

1)
http://support.microsoft.com/?id=325056
http://rodiniz.spaces.live.com/blog/cns!F2A56AAF89A7E43A!658.entry

2)
http://nicholas.piasecki.name/blog/2009/02/on-web-gardens-aspnet-and-iis-60/

  • 我们喜欢在每个站点上拥有单独的应用程序池,具体原因有一个:通过为单个应用程序池设置目录权限来允许站点的 Web 应用程序将文件写入磁盘。(“IIS AppPool\MyAppPoolName”。)在共享托管环境中尤其如此,您不希望一个站点能够在另一个站点的目录中写入文件! (2认同)