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

假设我们有以下配置:

pm = dynamic
pm.max_children = 100
pm.start_servers = 30
pm.min_spare_servers = 20
pm.max_spare_servers = 60
  • 当php-fpm启动时,它产生30个进程
  • 没有连接。 php-fpm是否会根据min_spare_servers设置关闭10个工作进程?如果是,请问几点之后?
  • 与nginx有40个连接。 php-fpm是否会为每个连接提供单独的工作程序,并立即生成其他工作程序来满足剩余的连接?
  • 与nginx有80个连接。 php-fpm启动60位工作人员后会如何表现?与(3)中相同吗?
  • 与nginx有120个连接。将100个 worker 分配给100个连接后会发生什么? php-fpm是否使用一些队列进行连接?会限制nginx吗? php-fpm是否将开始断开连接并显示消息“服务器已达到pm.max_children设置”?
  • 与nginx有50个连接。 Nginx会从100个连接回到60个连接吗?还是要50?它会立即杀死40名 worker 还是会等待一段时间?

  • 如您所见,这是一个关于php-fpm如何管理进程的普遍问题。更具体地说,我想了解php-fpm中pm.max_children和pm.max_spare_servers之间的区别。

    最佳答案

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



    不,根据我的测试,主进程不会根据min_spare_servers号终止额外的工作程序。最好将start_servers指定为等于min_spare_servers



    正确的同时进行与php-fpm的连接将由单独的工作人员提供。如果请求数大于start_servers,则主进程将派生其他工作器(fpm_children_make调用),直到max_spare_servers为止。



    它将 fork 尽可能多的工作人员以同时处理所有请求,直到达到max_children号; fpm主进程每秒执行一次维护(fpm_pctl_perform_idle_server_maintenance调用):如果产生的工作程序数量大于max_spare_servers,处于空闲状态的工作程序将向主进程发送SIGCHLD信号(fpm_got_signalfpm_children_bury调用)。



    正确,您将在 Debug模式下关注消息:seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers


    达到max_spare_servers编号后,所有处于空闲状态的工作程序都将被终止,并且主进程将停止终止。
    参数min_spare_serversmax_spare_servers负责可以同时在空闲状态下存活的工作程序的最小和最大数目。

    为了了解北斗,请尝试在php-fpm.conf中打开调试日志记录:...error_log = /var/log/php5-fpm/fpm-daemon.log...log_level = debug...请遵循日志文件:tail -f /var/log/php5-fpm/fpm-daemon.log并使用Apache基准测试工具ab来了解行为。

    关于php - php-fpm如何使用动态流程管理器管理工作人员?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39535926/

    10-11 12:52