Code前端首页关于Code前端联系我们

PHP-FPM管理与配置详解(FastCGI进程管理器)

terry 2年前 (2023-09-25) 阅读数 47 #后端开发

什么是PHP-FPM?

PHP-FPM 是 FastCGI 的进程管理器。

PHP-FPM 功能

  • 支持平滑停止和启动的高级进程管理功能
  • 动态和静态子进程生成
  • 慢速日志,记录运行脚本引起的异常缓慢端口和php的使用.ini

理解一些概念

1),CGI

CGI的全称是“通用网关接口”(Common Gateway Interface),它是HTTP服务器与其他机器上的程序之间的连接通信接口,程序必须运行在网络服务器上。

注意:CGI 可以用任何语言编写,只要该语言具有标准输入、输出和环境变量即可。

2),FastCGI

FastCGI是常驻CGI。它可以一直执行。只要激活了,就不会每次都花时间去分叉(这是最受诟病的分叉——而且来自CGI)。 - 执行模式)。它还支持分布式计算,即FastCGI程序可以在网站服务器以外的主机上执行,并接收来自其他网站服务器的请求。

FastCGI 是一个独立于语言的 CGI 开源扩展。它的主要行为是将CGI解释器进程保留在内存中,从而获得更高的性能。我们知道,CGI解释器的重复加载是CGI性能不佳的主要原因。如果CGI解释器存储在内存中并被FastCGI进程管理器接受,那么它可以提供良好的性能、可扩展性等。

优点:

1。 FastCGI 是无语言的;

2。 FastCGI 独立于核心 Web 服务器运行,提供比 API 更安全的环境。 API 将应用程序代码与核心 Web 服务器链接起来,这意味着对 API 行为不当的应用程序可能会导致其他应用程序或核心服务器崩溃。恶意API应用程序代码甚至可以窃取其他应用程序或核心服务器的密钥;

3。 FastCGI技术现在支持的语言有:C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby等。相关模块也可在Apache、ISS、Lighttpd等流行服务器上使用;

4。 FastCGI不依赖于Web服务器的内部架构,因此即使服务器技术发生变化,FastCGI仍然保持稳定;

缺点:

由于是多进程,所以比CGI多线程占用更多的服务器内存。 PHP-CGI 解释器每个进程使用 7 到 25 MB 的内存。这个数字乘以 50 或 100 就是一个很大的内存量。

Nginx 0.8.46+PHP 5.2.14 (FastCGI) 服务器拥有 30,000 个并发连接。 Nginx 10个进程开始使用150M内存(15M * 10 = 150M),64个php-cgi进程开始使用1280M。内存(20M * 64 = 1280M),加上系统使用的内存,使用内存不到2GB。如果服务器内存较小,则只能运行25个php-cgi进程,这样php-cgi使用的总内存只有500M。

上面的数据是从Nginx 0.8.x + PHP 5.2.13(FastCGI)中提取的,用于构建比Apache(版本6)好十倍的Web服务器。

原则:

1.当Web服务器启动时,它会加载FastCGI进程管理器;

2。 FastCGI进程管理器启动,启动一些CGI解释器进程(PHP-CGI)并等待来自Web服务器Connection的消息;

3。当客户端请求到达Web服务器时,FastCGI进程管理器选择并连接到CGI解释器,Web服务器将CGI环境变量和标准输入发送到FastCGI PHP-CGI子进程。

4。 FastCGI子进程完成处理后,它会从同一连接将标准输出和错误信息返回到Web服务器。当FastCGI子进程关闭连接时,请求被处理。然后,FastCGI 子进程等待并处理来自 FastCGI 进程管理器(在 Web 服务器上运行)的下一个连接。在CGI模式下,PHP-CGI在此退出。

在上面的情况下,你可以想象CGI通常有多慢。对 PHP 的每个 Web 请求都必须重新解析 php.ini,填写所有扩展名,并重新初始化所有数据结构。使用 FastCGI,所有这一切仅在进程启动时发生一次。此外,数据库持久连接也有效。

注意:FastCGI的主要优点是将动态语言和HTTP Server分离,因此Nginx和PHP/PHP-FPM经常部署在不同的服务器上,以分担前端Nginx服务器的压力,使Nginx能够处理。它专门处理静态请求并转发动态请求,而PHP/PHP-FPM服务器专门解析PHP动态请求。

3), PHP-CGI

PHP-CGI 是一个配备 PHP 的 FastCGI 管理器。

PHP-CGI 的缺点:

1。更改php-cgi中的php.ini配置后,需要重启php-cgi才能让新的php-ini生效,并且无法顺利重启。

2。立即杀掉php-cgi进程,php将无法运行(PHP-FPM和Spawn-FCGI没有这个问题,守护进程会顺利重新生成新的子进程)。

4), Spawn-FCGI

Spawn-FCGI 是一个公共 FastCGI 管理服务器。它是 lighttpd 的一部分。很多人使用Lighttpd的Spawn-FCGI在FastCGI模式下做管理工作。然而,也有很多缺点。 PHP-FPM的出现缓解了部分问题,但PHP-FPM的一个缺点是需要重新编译,这会对一些已经运行的环境带来相当大的风险(参考)。 PHP 直接在 PHP 5.3.3 -FPM 中运行。

Spawn-FCGI 现在是一个单独的项目,更加稳定,并且可以轻松配置许多网站。许多网站都会搭配 nginx 来处理动态网页。最新的lighttpd不包含这块(http://www.lighttpd.NET/search?q=Spawn-FCGI),但在以前的版本中可以找到。它包含在版本 lighttpd-1.4.15

(http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz) 中。目前Spawn-FCGI的下载地址为http://redmine.lighttpd.Net/projects/spawn-fcgi,最新版本为http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar 。广州。

注意:对于最新的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 1 重新打开日志文件
  • USR2 优雅地上传所有工作进程并上传配置和二进制模块
# 查看 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 动态设置

静态和动态配置

对于内存比较小、并发量较低的应用,可以考虑使用动态方式,这样可以控制 php-fpm 消耗的总量的记忆。

在高并发或者流量波动较大的情况下,使用静态比动态在高并发下可以获得更快的响应。

可配置进程数=php-fpm可配置内存/(php-fpm子进程内存占用*1.2)

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门