我在 Windows Server 2003 上使用 IIS 6.0 托管了多个网站。其中一些使用 .Net 1.1 框架,而其他使用 .Net 2.0。我目前为每个框架设置了应用程序池。还有其他原因需要添加其他应用程序池吗?
答案1
是的,很多:
- AppPools 可以以不同的身份运行,因此您可以通过这种方式限制权限。
- 您可以为每个应用程序池分配不同的标识,以便在运行任务管理器时知道哪个 w3wp.exe 是哪个。
- 您可以回收/重新启动一个应用程序池,而不会影响在不同应用程序池中运行的站点。
- 如果你的网站有内存泄漏或行为异常,你可以将其放在应用程序池中,这样它就不会影响其他网站
- 如果你的网站非常占用 CPU(例如调整照片大小),你可以将其放在自己的应用程序池中,并限制其 CPU 利用率
- 如果您有多个网站,每个网站都有自己的 SQL 数据库,则可以使用活动目录身份验证,而不是在 web.config 中存储用户名/密码。
答案2
我根据以下方面创建了 IIS 应用程序池和单独的应用程序:
- 关键任务应用程序获得自己的应用程序池:这样我就可以将它们与有问题的应用程序隔离开来。这样就可以进行单独配置,如果出现问题,我可以更轻松地进行监控或故障排除。
- 按类型隔离应用程序:按语言/技术或 .NET 框架版本进行池化。您可以将 ASP.NET 与传统 ASP 混合放在同一个池中,但如果 ASP 和 ASP.NET 都放在同一个池中,并且如果您的 ASP 应用程序出现问题而需要您重新启动工作进程,那么您的 ASP.NET 应用程序也将被回收。
- 有问题的应用程序(例如存在内存泄漏或 CPU 使用率过高、数据库连接泄漏等问题的应用程序)与普通应用程序分开。新应用程序进入“试用”池,该池会监控其正常运行时间和性能。如果应用程序在一段时间内表现稳定,则会将其移至普通应用程序池;否则,它将保持隔离状态。这有助于将问题较少的应用程序分组在一起。
答案3
此外,除了 Portman 的回答之外,出于安全原因,限制资源对池的访问。请参阅http://blogs.iis.net/tomwoolums/archive/2008/12/17/iis-7-0-application-pools.aspx