通过百度,阅读原文,翻译中文
process_control_timeout = 0
子进程接受主进程复用信号,复用信号是什么意思?
当一个url请求nginx处理交给php-fpm处理,这整个过程是一个什么原理?一个php-fpm进程里能包括多个请求?有没有高手给我讲讲.非常感谢.
通过百度,阅读原文,翻译中文
process_control_timeout = 0
子进程接受主进程复用信号,复用信号是什么意思?
当一个url请求nginx处理交给php-fpm处理,这整个过程是一个什么原理?一个php-fpm进程里能包括多个请求?有没有高手给我讲讲.非常感谢.
先来简单谈谈PHP请求处理过程吧。
Nginx与PHP的交互依赖于CGI接口,因为两者都实现了CGI接口,所以Nginx可以把收到的请求交给PHP,并从PHP获得相应的结果回传给客户端。
最基本的CGI实现是每次请求都新建一个PHP进程,处理完成后关闭进程,这种方式会消耗很多的资源在进程的启动和关闭上,所以效率并不高。
进而出现了FastCGI这种实现方式,也就是启动一个进程后让它处理多个请求再关闭,这种方式就是解决每次请求都打开和关闭进程的消耗的。但FastCGI有个缺点,就是因为一个进程只能同时处理一个请求,如果同时收到多个请求,它们只能排队等待FastCGI进程的处理。
解决FastCGI只能同时处理一个请求的方式很简单,就是开启多个FastCGI进程。不过开启多个FastCGI进程的就存在对这些进程的管理问题,比如究竟要开多少个进程,怎么根据需要分配请求到这些进程上等等。而PHP-FPM就是这样一个管理FastCGI进程的管理程序。Nginx先将请求传递给PHP-FPM,再由PHP-FPM选择合适的FastCGI处理进程进行处理。
在PHP-FPM将请求传递给FastCGI处理进程的时候,就涉及到进程复用了。原则上,PHP-FPM会选择空闲的FastCGI进程去处理请求,在处理之前,PHP-FPM会发送进程复用信号给FastCGI进程,用来让FastCGI进程准备好接受请求并处理。但是,FastCGI进程并不总是能够处理请求,也就是不能够响应进程复用信号(比如说出现假死的情况),所以这个参数就表示了PHP-FPM留给FastCGI进程多久时间去响应进程复用信号,如果超时了,PHP-FPM会选择其他的方式(例如使用其他的FastCGI进程)去处理请求。
fpm 全称 fastcgi process manager 是专门管理fastcgi的