PHP-FPM如何进行高效管理和详细配置?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1229个文字,预计阅读时间需要5分钟。
PHP-FPM是FastCGI的进程管理器。它支持平滑重启、高级进程管理功能、动态和静态子进程生成、慢日志记录,并记录脚本运行导致的异常缓慢。
PHP-FPM 是什么?
PHP-FPM 是 FastCGI 的进程管理器。
PHP-FPM 的特点
- 支持平滑停止、启动的高级进程管理功能
- 动、静态子进程产生
- 慢日志,记录脚本运行所导致的异常缓慢
- 可以监听不同的端口和使用不同的 php.ini
几个概念的理解
1)、CGI
CGI全称“公共网关接口”(Common Gateway Interface),是HTTP服务器与其它机器上的程序进行通信的接口,其程序须运行在网络服务器上。
NOTE:CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。
2)、FastCGI
FastCGI是一个常驻型的CGI,它可以一直执行,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute模式)。它还支持分布式的运算,即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。我们知道,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保存在内存中并接受FastCGI进程管理器调度,那么就可以提供良好的性能、伸缩性等。
优点:
1. FastCGI具有语言无关性;
2. FastCGI独立于核心web服务器运行,提供了一个比API更安全的环境。APIs把应用程序的代码与核心的web服务器链接在一起,这意味着在一个错误的API的应用程序可能会损坏其他应用程序或核心服务器。而恶意的API的应用程序代码甚至可以窃取另一个应用程序或核心服务器的密钥;
3. FastCGI技术目前支持语言有:C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby等。相关模块在Apache, ISS, Ligwww.ligwww.ligredmine.ligwww.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz。
NOTE:最新的Spawn-FCGI可以到lighttpd.net网站搜索“Spawn-FCGI”找到它的最新版本发布地址。
5)、对比Spawn-FCGI
PHP-FPM的使用非常方便,配置都是在PHP-FPM.ini的文件内,而启动、重启都可以从php/sbin/PHP-FPM中进行。更方便的是修改php.ini后可以直接使用PHP-FPM reload进行加载,无需杀掉进程就可以完成php.ini的修改加载
结果显示使用PHP-FPM可以使php有不小的性能提升。PHP-FPM控制的进程cpu回收的速度比较慢,内存分配的很均匀。
Spawn-FCGI控制的进程CPU下降的很快,而内存分配的比较不均匀。有很多进程似乎未分配到,而另外一些却占用很高。可能是由于进程任务分配的不均匀导致的。而这也导致了总体响应速度的下降。而PHP-FPM合理的分配,导致总体响应的提到以及任务的平均。
PHP-FPM 的管理和配置
PHP-FPM 管理
master 主进程理解以下信号:
- INT,TERM 立刻终止
- QUIT 平滑终止
- USR1 重新打开日志文件
- USR2 平滑重载所有 worker 进程并重新载入配置和二进制模块
# 查看 php-fpm 用户 ps aux | grep php-fpm # 查看 php-fpm 进程 pid ps -ef | grep php-fpm # 启动 php-fpm php-fpm -D # 关闭 php-fpm kill -INT [pid] # 重启 php-fpm kill -USR2 [pid]
ps 是展示当前进程的快照。
PHP-FPM 配置
/etc/php-fpm.d 文件夹中包含了所有进程池的配置,在主配置文件 /etc/php-fpm.conf 中有下面一行:
include=/etc/php-fpm.d/*.conf
php-fpm.conf 的主配置文件包含全局配置,子配置是不同进程池的配置,例如 www。
全局配置
# s 秒,m 分,h 小时,d 天 # 子进程在 emergency_restart_interval 设定的时间内收到该参数设定次数的 SIGSEGV 或者 SIGBUS退出信息号,则FPM会重新启动 emergency_restart_threshold 10 # 平滑重启的间隔时间: emergency_restart_interval 1m # 子进程接受主进程复用信号的超时时间 process_control_timeout 10s
进程池配置
# 接收 FastCGI 请求的地址 listen: 'ip:port', '/path/to/unix/socket' # 设置进程管理器如何管理子进程 pm: static 固定数量, ondemand 进程在有需求时才产生, dynamic 动态设置
static 和 dynamic 配置
内存比较少,并发量不是很大的应用,可以考虑采用 dynamic 的方式,这样可以控制 php-fpm 所消耗的总内存数。
在并发高或者流量波动大的情况下,使用 static 可以在高并发下获得比 dynamic 更快的响应速度。
可配置进程数量 = php-fpm 可配置内存 / (php-fpm 子进程的内存占用 * 1.2)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。
本文共计1229个文字,预计阅读时间需要5分钟。
PHP-FPM是FastCGI的进程管理器。它支持平滑重启、高级进程管理功能、动态和静态子进程生成、慢日志记录,并记录脚本运行导致的异常缓慢。
PHP-FPM 是什么?
PHP-FPM 是 FastCGI 的进程管理器。
PHP-FPM 的特点
- 支持平滑停止、启动的高级进程管理功能
- 动、静态子进程产生
- 慢日志,记录脚本运行所导致的异常缓慢
- 可以监听不同的端口和使用不同的 php.ini
几个概念的理解
1)、CGI
CGI全称“公共网关接口”(Common Gateway Interface),是HTTP服务器与其它机器上的程序进行通信的接口,其程序须运行在网络服务器上。
NOTE:CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。
2)、FastCGI
FastCGI是一个常驻型的CGI,它可以一直执行,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute模式)。它还支持分布式的运算,即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。我们知道,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保存在内存中并接受FastCGI进程管理器调度,那么就可以提供良好的性能、伸缩性等。
优点:
1. FastCGI具有语言无关性;
2. FastCGI独立于核心web服务器运行,提供了一个比API更安全的环境。APIs把应用程序的代码与核心的web服务器链接在一起,这意味着在一个错误的API的应用程序可能会损坏其他应用程序或核心服务器。而恶意的API的应用程序代码甚至可以窃取另一个应用程序或核心服务器的密钥;
3. FastCGI技术目前支持语言有:C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby等。相关模块在Apache, ISS, Ligwww.ligwww.ligredmine.ligwww.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz。
NOTE:最新的Spawn-FCGI可以到lighttpd.net网站搜索“Spawn-FCGI”找到它的最新版本发布地址。
5)、对比Spawn-FCGI
PHP-FPM的使用非常方便,配置都是在PHP-FPM.ini的文件内,而启动、重启都可以从php/sbin/PHP-FPM中进行。更方便的是修改php.ini后可以直接使用PHP-FPM reload进行加载,无需杀掉进程就可以完成php.ini的修改加载
结果显示使用PHP-FPM可以使php有不小的性能提升。PHP-FPM控制的进程cpu回收的速度比较慢,内存分配的很均匀。
Spawn-FCGI控制的进程CPU下降的很快,而内存分配的比较不均匀。有很多进程似乎未分配到,而另外一些却占用很高。可能是由于进程任务分配的不均匀导致的。而这也导致了总体响应速度的下降。而PHP-FPM合理的分配,导致总体响应的提到以及任务的平均。
PHP-FPM 的管理和配置
PHP-FPM 管理
master 主进程理解以下信号:
- INT,TERM 立刻终止
- QUIT 平滑终止
- USR1 重新打开日志文件
- USR2 平滑重载所有 worker 进程并重新载入配置和二进制模块
# 查看 php-fpm 用户 ps aux | grep php-fpm # 查看 php-fpm 进程 pid ps -ef | grep php-fpm # 启动 php-fpm php-fpm -D # 关闭 php-fpm kill -INT [pid] # 重启 php-fpm kill -USR2 [pid]
ps 是展示当前进程的快照。
PHP-FPM 配置
/etc/php-fpm.d 文件夹中包含了所有进程池的配置,在主配置文件 /etc/php-fpm.conf 中有下面一行:
include=/etc/php-fpm.d/*.conf
php-fpm.conf 的主配置文件包含全局配置,子配置是不同进程池的配置,例如 www。
全局配置
# s 秒,m 分,h 小时,d 天 # 子进程在 emergency_restart_interval 设定的时间内收到该参数设定次数的 SIGSEGV 或者 SIGBUS退出信息号,则FPM会重新启动 emergency_restart_threshold 10 # 平滑重启的间隔时间: emergency_restart_interval 1m # 子进程接受主进程复用信号的超时时间 process_control_timeout 10s
进程池配置
# 接收 FastCGI 请求的地址 listen: 'ip:port', '/path/to/unix/socket' # 设置进程管理器如何管理子进程 pm: static 固定数量, ondemand 进程在有需求时才产生, dynamic 动态设置
static 和 dynamic 配置
内存比较少,并发量不是很大的应用,可以考虑采用 dynamic 的方式,这样可以控制 php-fpm 所消耗的总内存数。
在并发高或者流量波动大的情况下,使用 static 可以在高并发下获得比 dynamic 更快的响应速度。
可配置进程数量 = php-fpm 可配置内存 / (php-fpm 子进程的内存占用 * 1.2)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

