【问题标题】:Drawback to creating a separate IIS application pool for each website / application为每个网站/应用程序创建单独的 IIS 应用程序池的缺点
【发布时间】:2011-01-01 19:11:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: asp.net iis application-pool


    【解决方案1】:

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

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

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

    缺点:

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

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

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

    这会阻止您在同一应用程序池中的不同网站之间共享会话,例如;但是共享缓存数据可能更容易。总的来说,讨论与为特定应用程序部署 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/

    【讨论】:

    • 根据我的测试,HttpRuntime.Cache 是特定于应用程序的。一个单独的应用程序,即使它在同一个应用程序池中,也有单独的 HttpRuntime.Cache 实例。
    • Microsoft 声明应用程序即使在同一个池中也是隔离的,但我参加过的每一次安全审查都很高兴听到有单独的应用程序池。我相信 MS 实现此功能只是为了“确定”。
    • 我们喜欢在每个站点上都有一个单独的应用程序池,特别是出于一个原因:通过为单个应用程序池设置目录权限,能够允许站点的 Web 应用程序将文件写入磁盘使用权。 (“IIS AppPool\MyAppPoolName”。)在共享主机环境中尤其如此,您不希望一个站点能够在另一个站点的目录中写入文件!
    【解决方案2】:

    除了配置时间和(可能)更多的内存要求之外,使用多个应用程序池没有任何不利之处。

    (需要明确一点...所需的内存会因许多因素而异——但有一种方法是,一个池中的 15 个应用程序使用的内存比 15 个池中的 15 个应用程序使用的内存更多。如果每个应用程序不需要太多内存和应用程序在不同时间使用且不经常使用。)

    【讨论】:

      猜你喜欢
      • 2021-10-14
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 2014-07-18
      • 2017-01-06
      • 2017-08-19
      • 2014-09-25
      相关资源
      最近更新 更多