PHP-FPM(FastCGI Process Manager)是 PHP 的一种进程管理器,旨在提高 PHP 在高并发环境下的性能。它是 FastCGI 协议的一种实现.
CGI 是最早的 Web 编程接口之一,它允许 Web 服务器与外部程序(如 PHP 脚本)进行交互。CGI 每次处理一个请求时,都会创建一个新的进程来执行相关的程序。这意味着每次客户端发送请求时,CGI 都会启动一个新的 PHP 进程来处理请求,执行完毕后再终止该进程。
工作原理:
FastCgi是cgi的改进版,对比cgi每次请求都要新建一个进程,fastcgi引入了进程池的概念,不会每个请求创建一个新进程,而是复用已经存在的进程,请求处理结束后,也不会销毁进程,而是将进程放回进程池中,等待下一次请求使用。
工作原理:
-改进:引入TCP协议和unix套接字。
1.对于CGI来说,每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展,并重新初始化全部数据结构。而使用FastCGI,所有这些都只在进程启动时发生一次。
2.由于FastCGI是多进程,所以比CGI多线程消耗更多的服务器内存,php-cgi解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。
首先要说的是:fastcgi是一个协议,php-fpm实现了这个协议。
php-cgi是php的解释器,只是一个cgi程序,它只能解析请求,返回数据,不会进程管理,所以php-fpm就是这样能够管理php-cgi进程的一个东西。实现了php的平滑重启。
PHP-FPM三种模式
1.static模式
static模式始终会保持一个固定数量的子进程,这个数量由pm.max_children定义。
2.dynamic模式
子进程的数量是动态变化的,启动时,会生成固定数量的子进程,可以理解成最小子进程数,通过pm.start_servers控制,而最大子进程数则由pm.max_children控制,子进程数会在pm.start_servers~pm.max_children范围内波动,另外,闲置的子进程数还可以由pm.min_spare_servers和pm.max_spare_servers两个配置参数控制。换句话说,闲置的子进程也可以由最小数目和最大数目,而如果闲置的子进程超过pm.max_spare_servers,则会被杀掉。
3.ondemand模式
这种模式和dynamic模式相反,把内存放在第一位,每个闲置进程在持续闲置了pm.process_idle_timeout秒后就会被杀掉。有了这个模式,到了服务器低峰期,内存自然会降下来,如果服务器长时间没有请求,就只有一个主进程,当然其弊端是,遇到高峰期或者pm.process_idle_timeout设置太小,无法避免服务器频繁创建进程的问题。
—— 评论区 ——