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