CARSON :
wlong :
我发现用这种方式运行php-cgi.exe 很不稳定, 稍微有几个访问php-cgi进程就会崩溃,后来我一下开启50个php-cgi进程,但是也会陆续崩溃。请问有什么办法解决?对.我也是碰到这样的问题..没办法…我就开启了10个php-cgi来监听不同的( 9000-9009)端口,然后用定时十分钟重启 nginx php-cgi, 因为是直接杀进程,然后启动,所以这样的重启用户根本就感觉不出来, 貌似这两天web好些了..
但我看到别人的教程说是监听 127.0.0.1:9000 就一个进程..windows 下我不知道如何多个进程来监听一个9000端口..恳请高手指教!
FastCGI PHP 有两个关键环境变量参数用来调节性能。
PHP_FCGI_CHILDREN,默认值是 0
第一个参数控制了 php-cgi 主进程所能 spawn 的子进程数目。 0 的情况下,php-cgi 不会产生子进程,由主进程负责处理请求。当
> 0 时,php-cgi 生成了对应的数目的子进程处理请求,而主进程则只负责管理子进程(*nix
系统中你会看到这个进程占用的内存很小)。当然这是在 *nix 系统的情况下,Windows 中,这个参数无效,
看一下 PHP 源码 sapi/cgi/cgi_main.c 可以确认这一点。
PHP_FCGI_MAX_REQUESTS,默认值 500
php-cgi 进程处理的最大请求数,当处理的请求 >= 这个数字时,php-cgi 便会自我销毁,*nix 系统中
PHP_FCGI_CHILDREN > 0 的情况下便会重生一个新的 php-cgi 进程。Windows
中第一个参数无效,所以只有一个主进程,因此自毁以后 PHP 也就挂了,而这个参数又是必须的,设置过大的话,没什么意义,PHP
中有不少函数都存在内存泄露的问题,如果无限制处理请求,php-cgi 的性能只会越来越弱直至崩溃。
Windows 系统实在没什么好的方法,可以在 Cygwin 下面自己编译一个带 php-fpm 的 PHP,以前只能用 patch
的方式给 PHP 打 fpm 的补丁,5.3.2+ 已经内置了…
或者用 Lighttpd 的 spawn-cgi,似乎有 Win32 版本。
生产环境下,如果必须是 Win32 系统,建议还是转到 IIS7 + PHP FASTCGI,Nginx 只能拿到玩玩而已。