php-fpm如何使用动态流程管理器管理员工?

时间:2016-09-16 16:10:14

标签: php multithreading nginx high-load

我想澄清一下php-fpm如何使用动态流程管理器来管理员工。

我们假设我们有以下配置:

pm = dynamic
pm.max_children = 100
pm.start_servers = 30
pm.min_spare_servers = 20
pm.max_spare_servers = 60
  1. 当php-fpm启动时,它会产生30个进程
  2. 没有联系。 php-fpm会根据 min_spare_servers 设置关闭10名工作人员吗?如果是的话,会在什么时候发生?
  3. 有16个与nginx的连接。 php-fpm会与单独的worker一起服务每个连接,并立即产生额外的worker来满足剩余的连接吗?
  4. 与nginx有80个连接。 php-fpm在推出60名工作人员之后会如何表现?与(3)中相同?
  5. 有120个与nginx的连接。将100名工人分配到100个连接后会发生什么? php-fpm是否使用某些队列进行连接?它会限制nginx吗? php-fpm会开始删除消息“服务器到达pm.max_children设置”的连接吗?
    1. 与nginx有50个连接。 nginx会从100回到60个连接吗?还是50?它会立即杀死40名工人还是会等一段时间?
  6. 如您所见,这是关于php-fpm如何管理进程的一个普遍问题。更具体地说,我想了解php-fpm中 pm.max_children pm.max_spare_servers 之间的区别。

1 个答案:

答案 0 :(得分:8)

首先,让我们假设我们不是通过nginx连接来谈论上游的连接/请求,而是php-fpm服务。

  
      
  1. 没有联系。根据min_spare_servers设置,php-fpm会关闭10名工作人员吗?如果是的话,会在什么时候发生?
  2.   

不,根据我的测试,主进程不会根据min_spare_servers号码终止额外的工作人员。可能最好将start_servers指定为min_spare_servers

  
      
  1. 有16个与nginx的连接。 php-fpm会为单独的worker提供每个连接,并立即产生额外的worker以满足剩余的连接吗?
  2.   

与php-fpm的正确,同时连接将与单独的工作人员一起提供。如果请求数超过start_servers主进程将分叉其他工作人员(fpm_children_make),最多为max_spare_servers

  
      
  1. 与nginx有80个连接。 php-fpm在推出60名工作人员之后会如何表现?与(3)中相同?
  2.   

它会根据需要分配尽可能多的工作人员来同时处理所有请求,直到它达到max_children个数字; fpm主进程每秒执行一次维护(fpm_pctl_perform_idle_server_maintenance调用):如果生成的工作数超过max_spare_servers,处于空闲状态的工作人员将向主进程发送SIGCHLD信号({{1} }和fpm_got_signal来电。)

  
      
  1. 有120个与nginx的连接。将100名工人分配到100个连接后会发生什么? php-fpm是否使用某些队列进行连接?它会限制nginx吗?将php-fpm开始删除与消息&#34的连接;服务器到达pm.max_children设置"?
  2.   

正确,您将在调试模式下关注消息: fpm_children_bury

  
      
  1. 与nginx有50个连接。 nginx会从100回到60个连接吗?还是50?它会立即杀死40名工人还是会等一段时间?
  2.   

处于空闲状态的所有工作人员将被终止,主程序将在达到 seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers 后停止终止 参数max_spare_serversmin_spare_servers负责同时处于空闲状态的工作人员的最小和最大数量。

要了解dipper,请尝试在max_spare_servers中启用调试日志记录: php-fpm.conf 关注日志文件: ... error_log = /var/log/php5-fpm/fpm-daemon.log ... log_level = debug ... 并使用Apache基准工具tail -f /var/log/php5-fpm/fpm-daemon.log来了解行为。