1. 理解应用程序池
应用程序池(Application Pool)是 IIS 中用于隔离 Web 应用程序的工作进程容器。每个应用程序池可以包含一个或多个工作进程(w3wp.exe),为应用程序提供独立的运行环境。
应用程序池的作用
- 进程隔离:不同应用程序池之间互不影响,一个崩溃不会波及其他
- 安全边界:每个池可配置独立的运行身份和权限
- 资源控制:可限制 CPU、内存使用,防止失控应用影响整体
- .NET 版本隔离:不同池可运行不同版本的 .NET Framework
💡 工作进程与请求处理
当客户端请求到达 IIS 时,请求被路由到对应的应用程序池,由池中的工作进程 w3wp.exe 处理。可以在任务管理器中看到工作进程,每个进程对应一个应用程序池。
2. 创建应用程序池
1
打开IIS 管理器 → 展开服务器节点 → 点击"应用程序池"
2
右侧面板 → 点击"添加应用程序池"
3
填写配置:
- 名称:
MyWebAppPool - .NET CLR 版本:.NET CLR 版本 v4.0 或"无托管代码"(适合静态内容)
- 托管管道模式:集成(推荐)或经典
4
点击"确定"完成创建
5
将网站分配到应用程序池:选择网站 → 右侧"基本设置" → 应用程序池 → 选择 MyWebAppPool
PowerShell - 应用程序池管理
# 创建应用程序池
New-WebAppPool -Name "MyWebAppPool"
# 设置 .NET 版本
Set-ItemProperty -Path "IIS:\AppPools\MyWebAppPool" `
-Name "managedRuntimeVersion" -Value "v4.0"
# 设置托管管道模式(集成/经典)
Set-ItemProperty -Path "IIS:\AppPools\MyWebAppPool" `
-Name "managedPipelineMode" -Value "Integrated"
# 将网站分配到应用程序池
Set-ItemProperty -Path "IIS:\Sites\MyWebSite" `
-Name "applicationPool" -Value "MyWebAppPool"
# 启动应用程序池
Start-WebAppPool -Name "MyWebAppPool"
3. 高级配置
1
选择应用程序池 → 右侧"高级设置"
2
常规配置:
- .NET CLR 版本:v4.0 / v2.0 / 无托管代码
- 托管管道模式:集成(推荐) / 经典
- 启动模式:AlwaysRunning(常驻运行)/ OnDemand(按需)
3
进程模型配置:
- 空闲超时:20分钟(超时后自动关闭工作进程)
- 最大工作进程数:1(Web Garden 模式可设多个)
4
回收配置:
- 固定时间间隔:1740分钟(29小时,默认值)
- 虚拟内存限制:0(禁用)
- 专用内存限制:0(禁用)
PowerShell - 高级配置
# 设置进程模型 - 空闲超时
Set-ItemProperty -Path "IIS:\AppPools\MyWebAppPool" `
-Name "processModel.idleTimeout" -Value "00:20:00"
# 设置回收 - 定时回收(每29小时)
Set-ItemProperty -Path "IIS:\AppPools\MyWebAppPool" `
-Name "recycling.periodicRestart.time" -Value "1.05:00:00"
# 设置内存限制(专用内存 500MB)
Set-ItemProperty -Path "IIS:\AppPools\MyWebAppPool" `
-Name "recycling.periodicRestart.privateMemory" -Value 524288
# 设置 CPU 限制(最大 50%,限流动作)
Set-ItemProperty -Path "IIS:\AppPools\MyWebAppPool" `
-Name "cpu.limit" -Value 50000
Set-ItemProperty -Path "IIS:\AppPools\MyWebAppPool" `
-Name "cpu.action" -Value "Throttle"
# 手动回收应用程序池
Restart-WebAppPool -Name "MyWebAppPool"
4. 常见问题
Q1:应用程序池自动停止,如何排查
检查事件查看器 → Windows 日志 → 应用程序,筛选来源为"WAS"。常见原因:应用程序启动异常、权限不足、内存超限等。
Q2:集成模式和经典模式有什么区别
集成模式使用 IIS 7+ 的统一管道,性能更好,是默认推荐模式。经典模式兼容旧版 IIS 6 应用程序,使用 ISAPI 筛选器处理请求。
Q3:Web Garden 模式(多工作进程)适用场景
适用于无状态应用程序,可提高并发处理能力。注意:Session 状态必须存储在外部(如 SQL Server、Redis),否则会话数据丢失。