php-fpm中master与worker工作方式及关系

分享于:2020-10-05 16:36:30

从事php开发以来,一直在理论上认为nginx的请求过来给了php-fpm,而php-fpm把请求给了master进程,master进行分配给worker,任务处理完成后,再由原路返回。

但今天仔细想了下,如果这样的话,根本就不需要有master进程了。直接php-fpm分配给worker就好了。

证实如下:

步骤一、设置php-fpm.conf,把pm设置为静态,worker个数为1

2020-07-16_134238.png


步骤二、设置完成后重新启动,查看php启动数量,一个master,一个worker


2020-07-16_134238.png


步骤三、打开2个窗口分别查看传输日志,使用strace 这个命令:strace -e network -p 9737

我在调用了:http://127.0.0.1:8001/api/car/index之后

2020-07-16_134238.png


worker:

2020-07-16_134238.png


由消息体可以看出,请求并没有通过master,而是直接通过worker的accept进行监听,接收,处理,返回。

也可以通过kill -HUP 9737把master进程杀死。worker依然可以接收请求。

那么master是做什么用的?

master进程不断调用epoll_wait和getsockopt是用来异步处理信号事件和定时器事件,只是php-fpm采用的是poll方式来处理【此处结论是摘抄而来】.通过步骤三的第一张图确实能看得出来。


来源:https://blog.csdn.net/zizhilianqiu/article/details/90374255