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

时间:2016-06-12 06:52:42

标签: php server fastcgi lighttpd mod-fastcgi

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中只有1个条目,因此会有1个Fastcgi后端。
  • 由于PHP_FCGI_CHILDREN = 3且max-procs = 2,因此" / usr / local / bin / php"过程将是2 *(3 + 1)= 7。
  • 由于max-procs = 2,在服务器状态下,会出现fastcgi.backend.0.0和fastcgi.backend.0.1的状态

因此,将有1个具有2个进程的fastcgi后端。这些过程接受负载。

我不明白以下几点:

  1. PHP_FCGI_CHILDREN有什么意义?
  2. 请求是由PHP_FCGI_CHILDREN还是由proc?
  3. 处理的
  4. 哪个参数决定1个proc的最大负载?它的默认值是什么?
  5. proc的max-load是否与PHP_FCGI_MAX_REQUESTS有任何关系?
  6. 如果PHP_FCGI_CHILDREN = 0,会发生什么?有人提到max-proc =观察者数量和max-proc * PHP_FCGI_CHILDREN =工人数量。这是什么意思?
  7. 什么时候说proc过载?

1 个答案:

答案 0 :(得分:0)

希望这可以帮助您了解情况

  

此答案其余部分的一些上下文:

“主”进程是产生的进程。这样就可以与其子级共享所有资源(例如内存)。但是,尽管它不能处理php请求,但可以将其视为实际请求处理程序的容器

“子”过程实际上是处理php请求的过程。反过来,这也是您对“主”流程施加多少负载的很大因素。

这里的一般策略应该是在保持稳定性的同时,尽量减少“主”进程的数量,并最大化“子”进程的数量,因为子进程将与兄弟姐妹共享操作缓存,内存空间和系统资源。

  1. PHP_FCGI_CHILDREN =“主”进程可以产生的子进程数量。
  2. 请求由PHP_FCGI_CHILDREN
  3. 处理
  4. PHP_FCGI_CHILDREN,默认为 1 ,如果将其设置为另一个值,则始终将1赋予您指定的数字[。因此,如果将其指定为1,它将添加1,它将变成2 ]
  5. 是的
  6. 如果您设置PHP_FCGI_CHILDREN=0,则每个“主”进程将仅产生1个子进程
  7. 当proc无法处理更多请求时,它会超载[由于缺乏资源]这是非常依赖系统/环境的,因此很抱歉在这里