PHP常见运行模式
1)CGI(通用网关接口/ Common Gateway Interface)
2)FastCGI(常驻型CGI / Long-Live CGI)lamp
3)CLI(命令行运行 / Command Line Interface)
4)Web模块模式(Apache等Web服务器运行的模式)
5)ISAPI(Internet Server Application Program Interface)
PHP-FPM 的基本工作原理
1)Web 服务器(Nginx)启动时载入 FastCGI 进程管理器(PHP-FPM),FastCGI 进程管理器自身初始化,启动多个
CGI 解释器进程(php-cgi),并等待来自 Web Server 的连接。 2)当收到 Web 服务器请求时,FastCGI
进程管理器选择并连接到一个 CGI 解释器。Web 服务器将 CGI 环境变量和标准输入发送到 FastCGI 子进程 php-cgi。
3)FastCGI 子进程完成处理后,将标准输出和错误信息从同一连接返回给 Web 服务器。当 FastCGI
子进程关闭连接时,即该请求处理完成。(在CGI模式中,php-cgi 在此便退出了) 4)FastCGI 子进程接着等待,并处理来自
FastCGI 进程管理器的下一个连接。
转载:PHP底层原理:CGI、FastCGI与PHP-FPM
php-fpm 开启 关闭 平滑重启
先来理解一下什么是php-fpm?
PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的。
PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
现在我们可以在最新的PHP
5.3.2的源码树里下载得到直接整合了PHP-FPM的分支,5.33以后的版本会融合进PHP的主分支去。相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。
PHP5.3.3以后的版本已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。在
./configure 的时候带 –enable-fpm 参数即可开启 PHP-FPM。
使用PHP-FPM来控制PHP-CGI的FastCGI进程。
我们源码安装php。
php-fpm自PHP 5.3.3开始版本不支持php-fpm以前的/usr/local/php/sbin/php-fpm (start|stop|reload)等命令,需要使用信号控制,
php-fpm master 进程可以理解一下以下的信号:
INT, TERM 立刻终止
QUIT 平滑终止
USR1 重新打开日志文件
USR2 平滑重载所有worker进程并重新载入配置和二进制模块
关闭php-fpm:
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
平滑重启php-fpm:
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
查看php-fpm进程数:
ps aux | grep -c php-fpm
注意php-fpm.pid文件需要到到php-fpm.conf配置文件里面打开:
[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
pid = run/php-fpm.pid
即,将pid(;pid = run/php-fpm.pid)前的;去掉。