PHP_FCGI_CHILDREN和max-procs在Lighttpd和Fastcgi配置中的含义

4

fastcgi配置中有4个字段,max-procs、max-load-per-proc、PHP_FCGI_CHILDREN、PHP_FCGI_MAX_REQUESTS:

fastcgi.server = ( ".php" =>
  (( "socket" => "/tmp/php-fastcgi.socket",
     "bin-path" => "/usr/local/bin/php",
     "max-procs" => "2",
     "bin-environment" => ( 
                           "PHP_FCGI_CHILDREN" => "3",
                           "PHP_FCGI_MAX_REQUESTS" => "10000" )
   ))
)
  • 由于fastcgi.server中只有一个条目,因此只会有一个Fastcgi后端。
  • 由于PHP_FCGI_CHILDREN =3且max-procs=2,将有2 *(3 + 1)= 7个“/usr/local/bin/php”进程。
  • 由于max-procs=2,在服务器状态中,将出现fastcgi.backend.0.0和fastcgi.backend.0.1的状态。

所以,将有1个带有2个进程的fastcgi后端。这些进程可以接受负载。

我不理解以下内容:

  1. PHP_FCGI_CHILDREN的重要性是什么?
  2. 请求由PHP_FCGI_CHILDREN还是proc处理?
  3. 哪个参数决定1个proc的最大负载?其默认值是多少?
  4. proc的最大负载是否与PHP_FCGI_MAX_REQUESTS有关?
  5. 如果PHP_FCGI_CHILDREN = 0会发生什么?提到了max-proc =观察者数量和max-proc* PHP_FCGI_CHILDREN =工作者数量。这是什么意思?
  6. 什么时候说一个proc已经超载?
1个回答

3
希望这能为情况提供一些启示。
以下是答案的一些背景信息:
“主”进程是一个被生成的进程。它可以与其子进程共享所有资源[如内存]。但是,它不处理php请求,可以将其视为实际请求处理程序的容器。
“子”进程实际上处理php请求。反过来,这也是影响“主”进程负载的一个非常重要因素。
总体策略应该是最小化“主”进程数量,同时最大化“子”进程数量,同时保持稳定性,因为子进程将与其兄弟们共享opcache、内存空间和系统资源。
1. PHP_FCGI_CHILDREN =“主”进程可以生成的子进程数量。 2. 请求由PHP_FCGI_CHILDREN处理。 3. PHP_FCGI_CHILDREN默认为1,如果设置为另一个值,则始终会将您指定的数字加1[所以如果将其设置为1,它会添加1,因此它将变为2]。 4. 是的,它确实是这样的。 5. 如果将PHP_FCGI_CHILDREN设置为0,则每个“主”进程仅生成1个子进程。 6. 当进程无法处理更多请求[由于缺乏资源]时,该进程将超载。这取决于系统/环境,因此很抱歉这里很模糊。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接