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

标签 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 个 fastcgi 后端和 2 个进程。这些进程接受负载。

我不明白以下内容:

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

最佳答案

希望这能说明一些情况

A little context for the rest of this answer:

“主”进程是一个被衍生的进程。这能够与其子级共享所有资源[如内存]。但是不处理 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. 当 proc 无法处理任何更多请求时,它就会过载 [由于缺乏资源] 这是非常依赖于系统/环境的,很抱歉在这里如此含糊

关于php - Lighttpd 和 Fastcgi 配置中 PHP_FCGI_CHILDREN 和 max-procs 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37771542/

相关文章:

php - 仅从指定的数组值回显值

php - $foo[bar] 和 $foo ['bar' ] 在 php 中的区别

php - 如何在 MYSQL 中的同一 INSERT QUERY 中的另一列中使用自动递增 Id?

ios - Xcode 机器人卡在 "Processing Results"上

java - 我如何修复 jboss : Failed to recover cluster state after the current node became the coordinator 中的此错误

python - 在 fastCGI apache 服务器上安装 Django 时无法找出错误日志

javascript - 如何为angular js设置动态url

javascript - 使用 Javascript 进行光栅化在 Apache 服务器上看起来有所不同

Apache - 如何获取 REMOTE_USER 变量

django - 使用 FastCGI 在 Hostmonster 上部署一个 django 项目