You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下PHP-CGI与Nginx运行一段时间后自动停止问题求助

Windows下php-cgi与Nginx运行15-20小时后同时崩溃的排查与解决

问题现象

Windows环境中使用php-cgi搭配Nginx运行PHP项目,初始15-20小时内运行正常,但之后php-cgi与Nginx服务会同时停止,重启服务后问题重复出现。启动批处理内容如下:

@ECHO OFF
ECHO Starting PHP FastCGI...
SET PHP_FCGI_MAX_REQUESTS=0
start C:\webserver\nginx\nginx.exe
C:\RunHiddenConsole.exe C:\webserver\php\php-cgi.exe -b 127.0.0.1:9000 -c "C:\werbserver\php.ini"

排查与解决步骤

1. 修正批处理中的路径拼写错误

批处理中指定的PHP配置文件路径C:\werbserver\php.ini存在拼写错误(werbserver应为webserver),错误路径会导致php-cgi无法加载正确配置,长期运行易引发异常崩溃。修正后的批处理:

@ECHO OFF
ECHO Starting PHP FastCGI...
SET PHP_FCGI_MAX_REQUESTS=1000
start C:\webserver\nginx\nginx.exe
C:\RunHiddenConsole.exe C:\webserver\php\php-cgi.exe -b 127.0.0.1:9000 -c "C:\webserver\php.ini"

2. 限制PHP_FCGI_MAX_REQUESTS避免内存泄漏

当前设置PHP_FCGI_MAX_REQUESTS=0意味着php-cgi会持续处理请求不重启,PHP长期运行易出现内存泄漏,累积到一定程度会触发崩溃。建议设置合理值(如1000),让php-cgi处理指定请求数后自动重启:

SET PHP_FCGI_MAX_REQUESTS=1000

同时在Nginx的server配置块中添加对应配置,确保请求能平滑切换到新进程:

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_max_requests 1000; # 与PHP_FCGI_MAX_REQUESTS保持一致

3. 查看Windows系统事件日志定位崩溃原因

服务崩溃时,Windows事件查看器(事件查看器->Windows日志->应用程序/系统)会记录详细错误信息(如异常代码、内存地址、触发崩溃的模块),可通过这些信息精准定位问题(比如特定PHP扩展内存泄漏、Nginx资源耗尽)。

4. 替换php-cgi为Windows版PHP-FPM

php-cgi为单进程模式,稳定性弱于PHP-FPM。Windows下有官方或第三方编译的PHP-FPM版本,使用FPM可自动管理PHP进程生命周期,自动重启崩溃进程,大幅提升整体稳定性。

5. 检查系统资源占用情况

  • 打开任务管理器,监控php-cgi和Nginx进程的内存、CPU占用,确认是否存在资源持续增长不释放的情况;
  • 检查Windows虚拟内存设置,确保虚拟内存容量足够(建议设为物理内存的1.5-2倍);
  • 关闭不必要的后台程序,释放系统资源。

6. 更新PHP与Nginx到稳定版本

旧版本的PHP或Nginx可能存在已知的内存泄漏、崩溃bug,更新至最新稳定版(如PHP 7.4/8.x稳定版、Nginx Windows稳定版)可修复多数旧版本问题。

内容的提问来源于stack exchange,提问作者user3606682

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 04:02:59