PHP 技能精进之 PHP-FPM 多进程模型
PHP-FPM 提供了更好的 PHP 进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。那么当我们谈论 PHP-FPM 多进程模型的时候,作为 PHPer 的你了解多少呢?
首先,让我们一起看几个问题:
①:PHP-FPM 启动进程的方式主要有哪几种,区别是什么?
②:PHP-FPM,是主进程接收请求转给子进程,还是子进程单独接收请求并处理,如何验证?
③:为何在 PHP-FPM 模式下,PHP 代码很少有人去做连接池?
④:PHP-FPM 模式性能差的体现有哪些,如何优化?
⑤:PHP-FPM 模式下的 YAC 为何无法和 CLI 模式无法共享内存?
1. 如何启动进程
PHP-FPM 是多进程模式,由 Master 进程管理 Worker 进程。进程的数量,都可以通过 php-fpm.conf 做具体配置。 PHP-FPM 的进程可以分为动态模式及静态模式:
①:静态(Static)
直接开启指定数量的 PHP-FPM 进程,不再增加或者减少;启动固定数量的进程,占用内存高。但在用户请求波动大的时候,对 Linux 操作系统进程的处理上耗费的系统资源低。
②:动态(Dynamic)
开始时开启一定数量的 PHP-FPM 进程,当请求量变大的时候,动态增加 PHP-FPM 进程数到上限,当空闲的时候自动释放空闲进程数到一个下限。
动态模式会根据 max、min、idle children 配置,动态的调整进程数量。在用户请求较为波动,或者瞬间请求增高的时候,动态模式下会进行大量进程的创建、销毁等操作,而造成 Linux 负载波动升高。简单来说,请求量少,PHP-FPM 进程数少,请求量大,进程数多。优势就是,当请求量小的时候,进程数少,内存占用也小。
③:按需 (Ondemand)
这种模式下,PHP-FPM 的 Master 不会 Fork