在 Windows Server 环境中,运行 PHP 等应用时,通常需要依赖 IIS + FastCGI 的方式来提供 Web 服务。但在长期运行的过程中,FastCGI 进程可能会出现 内存泄漏、性能下降或响应变慢 的情况。为了避免频繁手动结束进程,我们可以通过 自动回收 FastCGI 进程 来保持网站的稳定与高效。
本文将介绍一个 一键应用配置的 PowerShell 脚本,帮助管理员快速完成 FastCGI 的自动回收设置。
为什么需要自动回收 FastCGI?
在 IIS 环境中,FastCGI 进程管理器会负责维护 PHP 等脚本解释器的运行。随着时间推移,这些进程可能会:
-
占用越来越多的内存,导致服务器整体性能下降
-
响应时间逐渐变慢,影响用户访问体验
-
出现错误但无法自动恢复
通过 配置自动回收策略,我们可以让 FastCGI 进程在达到一定条件(例如运行时间、请求数、内存占用)时自动退出并重启,从而保持服务稳定。
手动配置方式(传统方法)
在 IIS 管理器中,可以通过以下路径设置回收策略:
-
打开 IIS 管理器
-
进入 FastCGI 设置
-
选择对应的 PHP FastCGI 条目
-
点击 编辑,设置以下参数:
-
instanceMaxRequests
(最大请求数,例如 10000) -
activityTimeout
(活动超时,例如 600 秒) -
requestTimeout
(请求超时,例如 600 秒) -
monitorChangesTo
(配置文件变化时自动回收,例如 php.ini)
-
但是手动配置繁琐,如果服务器较多,就显得低效。
一键应用的 PowerShell 脚本
为了解决上述问题,可以使用 PowerShell 脚本一次性完成配置。
# 一键配置 IIS FastCGI 自动回收策略
Import-Module WebAdministration
# 指定 FastCGI 程序路径(根据实际情况修改)
$fastcgiExe = "C:\php\php-cgi.exe"
# 设置 FastCGI 自动回收配置
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter "system.webServer/fastCgi/application[@fullPath='$fastcgiExe']" `
-name "instanceMaxRequests" -value 10000
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter "system.webServer/fastCgi/application[@fullPath='$fastcgiExe']" `
-name "activityTimeout" -value 600
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter "system.webServer/fastCgi/application[@fullPath='$fastcgiExe']" `
-name "requestTimeout" -value 600
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter "system.webServer/fastCgi/application[@fullPath='$fastcgiExe']" `
-name "monitorChangesTo" -value "C:\php\php.ini"
Write-Host "✅ FastCGI 自动回收策略已成功应用!"
使用方法
-
将上述脚本保存为
Set-FastCGIRecycle.ps1
-
使用 管理员权限 打开 PowerShell
-
运行:
.\Set-FastCGIRecycle.ps1
执行完成后,系统会立即更新 IIS FastCGI 的配置,无需手动操作。
总结
通过本文的 PowerShell 脚本,管理员可以快速为 IIS 环境中的 FastCGI 配置 自动回收策略,避免长期运行带来的性能问题。相比手动设置,脚本方式更加高效,也便于批量应用到多台服务器。
如果你的服务器运行 PHP 网站,并且遇到过 访问变慢、内存占用过高 的情况,那么强烈推荐使用该脚本进行优化。