我想澄清一下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之间的区别。
最佳答案
首先,让我们假设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_signal
和fpm_children_bury
调用)。
正确,您将在 Debug模式下关注消息:seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers
达到max_spare_servers
编号后,所有处于空闲状态的工作程序都将被终止,并且主进程将停止终止。
参数min_spare_servers
和max_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/