php fpm原理,Nginx+Php-fpm运行原理详解

php-fpm是一种master(主)/worker(子)多进程架构,与nginx设计风格有点类似。master进程主要负责CGI及PHP环境初始化、事件监听、子进程状态等等, worker进程负责处理php请求。

master只是负责管理工作,并不是很多人认为的把客户端发来的请求分给worker进程处理,而是由worker进程负责客户端的请求监听和处理, master只负责管理worker,如重启,重新加载配置文件,并不会派发请求。

一旦kill掉worker进程后,会重启一个新的worker进程。因此客户端请求肯定会得到响应处理。这进一步验证了的上面的结论,master进程负责监听子进程的状态,子进程挂掉之后,会发信号给master进程,然后master进程重新启一个新的worker进程。

worker是同步阻塞,必须等这次处理完,才会处理其它请求,并发性能不行.

nginx与php-fpm的结合,完整的流程是这样的。

www.example.com

|

|

Nginx

|

|

路由到www.example.com/index.php

|

|

加载nginx的fast-cgi模块

|

|

fast-cgi监听127.0.0.1:9000地址

|

|

www.example.com/index.php请求到达127.0.0.1:9000

|

|

php-fpm 监听127.0.0.1:9000

|

|

php-fpm 接收到请求,启用worker进程处理请求

|

|

php-fpm 处理完请求,返回给nginx

|

|

nginx将结果通过http返回给浏览器

1.传统php-fpm工作模式的问题

1、Fastcgi进程管理器,实现fastcgi协议

2、同步阻塞IO进程模型

3、请求结束后释放所有资源和内存

4、并发受限于进程数

5、PHP框架初始化占用大量的计算资源

2. php-fpm工作模式的问题

1、nginx基于epoll事件模型,一个worker同时可处理多个请求

2、fpm-worker在同一时刻可处理一个请求

3、master进程只负责处理worker进程的监控、日志等

4、用户端请求由elb解析,再经过nginx解析

5、fpm-worker每次处理请求前需要重新初始化mvc框架,然后再释放资源

6、高并发请求时,fpm-worker不够用,nginx直接响应502

7、fpm-worker进程间切换消耗大(如某线上业务在4核8G内存服务器实质可利用16个进程)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值