IIS 服务器

如何将 IIS 服务器安装到 Windows 10 上

对于这个问题,请参见博客 Win10 如何开启 IIS 服务以及如何打开 IIS 管理器

什么是 IIS 应用程序池

应用程序池 是 IIS 中的“进程隔离单元”。每个应用程序池都会启动一个或多个 w3wp.exe 进程来运行 Web 应用。

不同应用程序池之间的应用程序互不影响(内存、崩溃、配置独立)。

同一个应用程序池下的网站或应用程序共享同一个工作进程(意味着共享内存空间、CLR 实例等)。

IIS 中的层级结构

1
2
3
4
5
服务器 (Server)
└── 应用程序池 (Application Pool)
└── 网站 (Site)
└── 应用程序 (Application)
└── 虚拟目录 (Virtual Directory)

网站与应用程序池的关系

  • 一个网站(Site)必须绑定到一个应用程序池
  • 一个应用程序池可以服务多个网站

常见建议

  • 每个网站使用独立的应用程序池
  • 多个小型网站,资源有限,可共用一个应用程序池
  • 同一个网站下有多个子应用(/api、 /admin)等,可以分别分配不同的应用程序池以提高稳定性

常用的 IIS 程序池配置

🧩 一、应用程序池主要配置分类总览

配置类别 示例设置项 作用
常规(General) .NET CLR 版本、托管管道模式 决定运行环境
进程模型(Process Model) 标识(Identity)、空闲超时、最大工作进程数 控制进程生命周期与权限
回收(Recycling) 定期回收、特定时间回收 防止内存泄漏
性能(Performance) 空闲超时、最大请求数、队列长度 控制性能表现
故障回收(Rapid-Fail Protection) 最大失败数、时间间隔 防止频繁崩溃
CPU 限制(CPU) 限制百分比、操作模式 控制 CPU 占用
启动/关机行为(Start Mode / Idle Timeout) AlwaysRunning, OnDemand 控制池启动策略

🧱 二、常用配置详解

1️⃣ 常规设置(General)

项目 说明 常见配置
.NET CLR 版本 指定运行环境 .NET CLR v4.0无托管代码(纯静态/Node.js/PHP)
托管管道模式 管道处理方式 Integrated(推荐) 或 Classic(旧版兼容)
启动模式(Start Mode) 应用程序池是否在 IIS 启动时立即启动 AlwaysRunning(生产环境推荐)

2️⃣ 进程模型(Process Model)

项目 说明 常见配置
标识(Identity) 应用池运行的系统账户 默认 ApplicationPoolIdentity(安全性高)
空闲超时(Idle Time-out) 无请求后多久自动回收(分钟) 默认 20 分钟;高访问量网站建议设为 0(禁用)
最大工作进程数(Web Garden) 每个池可启动的进程数 默认 1,不要轻易改(除非是特殊并行需求)
加载用户配置文件 是否加载用户配置文件 一般设为 True(对部分框架如 ASP.NET 必须)

3️⃣ 回收设置(Recycling)

项目 说明 常见配置
定期回收(固定时间间隔) 默认每 1740 分钟(29 小时) 可自定义;如凌晨 3:00 定时回收
特定时间回收(Specific Time) 在指定时刻重启池 03:00:00(防止高峰期重启)
回收条件 内存限制、虚拟内存限制等 内存 > 1GB 可设 Private Memory Limit 1024MB
回收事件日志 回收时写入日志 建议启用(方便排查问题)

4️⃣ 性能(Performance)

项目 说明 常见配置
空闲超时 与进程模型中重复,用于节省资源 高访问量站点可设 0(禁用)
最大请求队列长度 等待处理的最大请求数 默认 1000,可根据负载调整
定期 ping(Ping Enabled) 监测工作进程是否响应 保持默认启用

5️⃣ 快速失败保护(Rapid-Fail Protection)

项目 说明 常见配置
启用快速失败保护 防止应用频繁崩溃时无限重启 默认启用
最大失败数 在指定时间内最多允许失败次数 默认 5 次 / 5 分钟
失败后操作 超出次数后停止应用池 默认启用(防止死循环崩溃)

6️⃣ CPU 限制(CPU)

项目 说明 常见配置
限制 CPU 使用率 限制单进程 CPU 百分比 例如:Limit = 80Action = Throttle
动作(Action) 超过限制后执行的动作 Throttle(降速) 或 KillW3wp(终止进程)

⚙️ 三、常见推荐配置模板(生产环境)

配置项 推荐值 说明
.NET CLR 版本 v4.0 / 无托管代码 取决于框架
托管管道模式 Integrated 性能好
启动模式 AlwaysRunning 防止首请求延迟
空闲超时 0 保持常驻内存
回收时间 03:00:00 低峰期自动回收
标识 ApplicationPoolIdentity 安全性高
最大请求队列 2000 高并发下防止拒绝服务
快速失败保护 启用 防止崩溃循环
CPU 限制 80%, Throttle 控制资源占用

🧠 四、补充建议

  • 生产环境 建议每个独立网站或微服务使用独立应用程序池;
  • ⚠️ 不要盲目提高“最大工作进程数”(Web Garden),容易引发 Session 丢失;
  • 🔍 可使用 AppCmd.exe 或 PowerShell 来批量查看/修改应用程序池配置;
  • 📈 定期查看 IIS 日志 + Windows 事件查看器,监控应用池重启次数和原因。

如何重新启动 IIS

下面的命令需要在命令行(以管理员身份启动的)中执行

1
iisreset /restart

完~