August
13th,
2009
如果使用fastcgi的方式启动php,php-cgi进程在运行一段时间之后会自动退出,然后父进程再拉起一个新的php-cgi提供服务。
lighttpd版本如为1.4,lighttpd提供了一个配置项指定php-cgi的退出条件: PHP_FCGI_MAX_REQUESTS, 指定php-cgi在处理多少个请求之后退出服务。
fastcgi.server = ( ".php" => (( "socket" => "/tmp/php-fastcgi.socket", "bin-path" => "/usr/local/bin/php", "bin-environment" => ( "PHP_FCGI_CHILDREN" => "16", "PHP_FCGI_MAX_REQUESTS" => "10000" ) )) )
1.5的lighttpd里,由于spawn-fcgi被剥离出来,所以这个参数的指定就由spawn-fcgi完成,但spawn-fcgi实际上没有传递该参数给php-cgi进程,所以php-cgi使用PHP_FCGI_MAX_REQUESTS的默认值500。 spawn-fcgi只提供了php-cgi子进程个数的指定: <pre class=c name=code> if (child_count >= 0) { snprintf(cgi_childs, sizeof(cgi_childs), “PHP_FCGI_CHILDREN=%d”, child_count); putenv(cgi_childs); } </pre>
如果想指定PHP_FCGI_MAX_REQUESTS,可以模仿上面的代码修改spawn-fcgi.c,将PHP_FCGI_MAX_REQUESTS传递给php-cgi。
一些网站提到php-cgi进程数不宜过大,4G内存才能开到20个进程,但是据我观察1G内存开36个php-cgi是没问题的。