我想澄清一下php-fpm如何使用动态流程管理器来管理员工。
我们假设我们有以下配置:
pm = dynamic
pm.max_children = 100
pm.start_servers = 30
pm.min_spare_servers = 20
pm.max_spare_servers = 60
如您所见,这是关于php-fpm如何管理进程的一个普遍问题。更具体地说,我想了解php-fpm中 pm.max_children 和 pm.max_spare_servers 之间的区别。
答案 0 :(得分:8)
首先,让我们假设我们不是通过nginx连接来谈论上游的连接/请求,而是php-fpm服务。
- 没有联系。根据min_spare_servers设置,php-fpm会关闭10名工作人员吗?如果是的话,会在什么时候发生?
醇>
不,根据我的测试,主进程不会根据min_spare_servers
号码终止额外的工作人员。可能最好将start_servers
指定为min_spare_servers
。
- 有16个与nginx的连接。 php-fpm会为单独的worker提供每个连接,并立即产生额外的worker以满足剩余的连接吗?
醇>
与php-fpm的正确,同时连接将与单独的工作人员一起提供。如果请求数超过start_servers
主进程将分叉其他工作人员(fpm_children_make
),最多为max_spare_servers
。
- 与nginx有80个连接。 php-fpm在推出60名工作人员之后会如何表现?与(3)中相同?
醇>
它会根据需要分配尽可能多的工作人员来同时处理所有请求,直到它达到max_children
个数字; fpm主进程每秒执行一次维护(fpm_pctl_perform_idle_server_maintenance
调用):如果生成的工作数超过max_spare_servers
,处于空闲状态的工作人员将向主进程发送SIGCHLD
信号({{1} }和fpm_got_signal
来电。)
- 有120个与nginx的连接。将100名工人分配到100个连接后会发生什么? php-fpm是否使用某些队列进行连接?它会限制nginx吗?将php-fpm开始删除与消息&#34的连接;服务器到达pm.max_children设置"?
醇>
正确,您将在调试模式下关注消息:
fpm_children_bury
- 与nginx有50个连接。 nginx会从100回到60个连接吗?还是50?它会立即杀死40名工人还是会等一段时间?
醇>
处于空闲状态的所有工作人员将被终止,主程序将在达到
seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers
后停止终止
参数max_spare_servers
和min_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
来了解行为。