IIS 性能优化

IIS · 第 8 篇 · 适用于 Windows Server 2019 / 2022 / 2025

📑 目录

  1. 性能优化原则
  2. 应用程序池优化
  3. 输出缓存
  4. 压缩配置
  5. 常见问题

1. 性能优化原则

IIS 性能优化应遵循先监控后调优的原则,通过性能计数器和日志分析定位瓶颈,再有针对性地调整配置。

常见性能瓶颈

2. 应用程序池优化

1

选择应用程序池 → 右侧"高级设置"

2

常规设置:

  • 启动模式:AlwaysRunning(常驻运行,减少冷启动延迟)
  • 队列长度:1000 → 5000(增大请求队列)
3

进程模型设置:

  • 空闲超时:0(禁用,常驻运行)
  • 最大工作进程:根据 CPU 核心数调整(Web Garden)
4

回收设置:

  • 固定时间间隔:0(禁用定时回收,改用内存触发)
  • 专用内存限制:500000(500MB 触发回收)
PowerShell - 应用程序池优化
# 设置常驻运行
Set-ItemProperty -Path "IIS:\AppPools\MyWebAppPool" `
    -Name "startMode" -Value "AlwaysRunning"

# 禁用空闲超时
Set-ItemProperty -Path "IIS:\AppPools\MyWebAppPool" `
    -Name "processModel.idleTimeout" -Value "00:00:00"

# 增大请求队列
Set-ItemProperty -Path "IIS:\AppPools\MyWebAppPool" `
    -Name "queueLength" -Value 5000

# 设置内存限制触发回收
Set-ItemProperty -Path "IIS:\AppPools\MyWebAppPool" `
    -Name "recycling.periodicRestart.privateMemory" -Value 524288

# 禁用定时回收
Set-ItemProperty -Path "IIS:\AppPools\MyWebAppPool" `
    -Name "recycling.periodicRestart.time" -Value "00:00:00"

3. 输出缓存

PowerShell - 配置输出缓存
# 启用内核缓存(性能最佳)
Set-WebConfigurationProperty -PSPath "IIS:\Sites\MyWebSite" `
    -Filter "system.webServer/caching" `
    -Name "enabled" -Value $true

# 添加静态文件缓存规则
Add-WebConfigurationProperty -PSPath "IIS:\Sites\MyWebSite" `
    -Filter "system.webServer/staticContent/clientCache" `
    -Name "." -Value @{cacheControlMode="UseMaxAge";cacheControlMaxAge="7.00:00:00"}

# 查看缓存配置
Get-WebConfigurationProperty -PSPath "IIS:\Sites\MyWebSite" `
    -Filter "system.webServer/caching" -Name "enabled"

4. 压缩配置

1

选择网站 → 双击"压缩"

2

勾选配置:

  • 启用动态内容压缩:压缩 ASP.NET、PHP 等动态内容
  • 启用静态内容压缩:压缩 CSS、JS、HTML 等静态文件
PowerShell - 启用压缩
# 启用动态压缩
Set-WebConfigurationProperty -PSPath "IIS:\Sites\MyWebSite" `
    -Filter "system.webServer/urlCompression" `
    -Name "doDynamicCompression" -Value $true

# 启用静态压缩
Set-WebConfigurationProperty -PSPath "IIS:\Sites\MyWebSite" `
    -Filter "system.webServer/urlCompression" `
    -Name "doStaticCompression" -Value $true

# 设置压缩级别(0-10,越高压缩率越大但CPU消耗越多)
Set-WebConfigurationProperty -PSPath "IIS:\Sites\MyWebSite" `
    -Filter "system.webServer/httpCompression" `
    -Name "staticCompressionLevel" -Value 7

5. 常见问题

Q1:启用压缩后 CPU 占用过高

动态压缩 CPU 开销较大,可降低 dynamicCompressionLevel 至 3-5,或仅对特定 MIME 类型启用压缩。

Q2:缓存不生效

检查响应头是否包含 Cache-Control: privateVary: *,这些会阻止缓存。确保静态文件的响应头包含缓存策略。

Q3:Web Garden 模式下 Session 丢失

Web Garden 多工作进程模式下,必须将 Session 存储在外部(如 SQL Server、Redis),否则 Session 会随机丢失。