IIS中ASP.net应用程序的单独应用程序池

时间:2009-08-13 18:19:07

标签: asp.net iis web-applications iis-7

我已经阅读过建议,我们应该为Win2008服务器上的每个asp.net应用程序创建单独的应用程序池。

我们有大约20个应用程序可以在同一台服务器上。我知道这将创建20个独立的工作流程,这看起来非常浪费。

为每个应用程序创建单独的应用程序池是不错的做法?

9 个答案:

答案 0 :(得分:33)

从ServerFault转发,“Why add additional application pools in IIS?

  • AppPools可以作为不同的身份运行,因此您可以通过这种方式限制权限。
  • 您可以为每个应用程序池分配不同的标识,以便在运行任务管理器时,您知道哪个是w3wp.exe。
  • 您可以回收/重新启动一个应用程序池,而不会影响在不同应用程序池中运行的站点。
  • 如果您的网站存在内存泄漏或通常行为不当,您可以将其放在应用程序池中,这样就不会影响其他网站
  • 如果您的网站非常耗费CPU(例如调整照片大小),您可以将其放在自己的应用程序池中并限制其CPU利用率
  • 如果您有多个网站,每个网站都有自己的SQL数据库,则可以使用Active Directory身份验证,而不是在web.config中存储用户名/密码。

答案 1 :(得分:6)

如果有原因,在池中分离应用程序是一件好事,上面列出了很多好的理由。但是,有充分的理由不将应用程序分成不同的池。

使用相同访问权限,.NET版本等的应用程序将在单个池中更高效地运行,并且更易于维护。最令人讨厌的是,IIS会杀死空闲的应用程序池,需要在每次使用时重新创建池。如果您隔离不常用的应用程序,则会给用户带来不必要的启动成本。将这些应用程序组合到一个池中,可以让用户在不支付启动成本时获得更快乐的用户,在不为多个进程提供内存的情况下使用更快的服务器,为他们提供CPU切片,以及在需要管理更少应用程序时更快乐的管理员池。

答案 2 :(得分:6)

我曾经在同一台IIS7.5服务器上拥有58个.Net网站和17个旧的经典ASP网站,每个网站使用不同的应用程序池。我注意到IIS压缩开始间歇性地失败,导致样式表在大约5%的时间内被破坏。查看服务器上的任务管理器,我可以看到服务器接近它的4GB内存限制 - 每个w3wp.exe进程占用的内存高达100 MB,具体取决于站点的流量。然后我将所有网站移动到只有2个应用程序池(一个用于.net 4网站,一个用于旧的经典ASP网站),并且在执行此操作后使用的总内存从3.8GB降至略低于2.8GB - 为我节省了超过1GB内存服务器上的空间。在更改之后(并使服务器运行几个小时以恢复到正常的流量级别),w3wp进程对所有.net网站网站使用300MB,对于传统ASP网站使用20MB。我可以再次重新启用IIS压缩而没有问题。

使用单独的APP池是出于上述其他帖子提到的许多原因的一个好主意,但根据我的经验,如果您在同一台服务器上托管相当数量的网站,则会导致更高的内存开销。 / p>

我想这是硬件限制和安全性之间的权衡,是否要使用单独的应用程序池。如果你有足够的资源,这是个好主意。

答案 3 :(得分:3)

是的,即使是20个应用程序也是个好主意。

  1. 安全。在不同帐户下运行的不同应用程序池。
  2. 隔离。一个崩溃的应用程序不会删除其他应用程序。
  3. 内存(如果您运行的是32位)。每个应用程序池都有自己的地址空间。因此,对于一个进程,您可以处理的内存大于最大约2.7GB的可用空间。
  4. 您可以选择定期重启一个效果不佳的应用,而不会影响其他应用。

答案 4 :(得分:1)

如果您的应用程序稳定并且没有使用太多内存,那么我会说可以将它们放在同一个应用程序池中。应用程序池可以让您隔离应用程序。

答案 5 :(得分:1)

我在创建应用程序池时考虑的一个主要原因是流程管理。还有其他原因,如安全等。 当IIS托管的应用程序崩溃时,它也会关闭其主机进程。在以前的IIS版本中,这意味着所有Web活动都崩溃了。使用应用程序池,您可以将应用程序彼此隔离。如果有内存泄漏并且不断崩溃,您的其他应用程序将继续运行。

答案 6 :(得分:0)

创建不同应用程序池的主要好处是可以为每个池提供其他凭据。您的20个应用程序可能与需要另一次登录的20个不同数据库通信。最佳做法是使用不同的服务帐户运行每个应用程序。

我不会太担心性能。无论每个应用程序处于什么进程,大部分时间都可能花在每个Web应用程序中。

答案 7 :(得分:0)

这实际上取决于应用程序,安全模型以及您对应用程序的信任程度。

以下是我总是告诉人们在使用应用程序池时要考虑的一些事项。

  • 如果每个应用程序需要不同的系统资源访问权限,请使用单独的应用程(可以使用多个流程帐户)
  • 如果某个应用程序是资源耗费,关键任务或“未知”,最好将其放入自己的池中以将其与系统的其他部分隔离

答案 8 :(得分:0)

我们作为大型企业客户的外部承包商。我们不在现场,所以我们没有连接到他们所有的系统。有时在开发期间,我有必要直接在他们的开发服务器上调试应用程序。要做到这一点,我必须能够附加到w3wp进程。当我附加并开始调试时,整个进程会停止,这会影响同一进程/应用程序池中的所有应用程序。 通过创建一个专用的应用程序池并在那里开发我的开发,我可以轻松调试,而不会让任何人的生活变得悲惨。

相关问题