首页 > 编程语言 >PHP-FPM及相关配置

PHP-FPM及相关配置

时间:2024-11-21 18:12:44浏览次数:1  
标签:cgi php FPM 配置 number fpm PHP children pm

学习记录 留作参考
祝君好运

php-cli, php-cgi, fastcgi, php-fpm

php-cli

Command Line Interface 命令行接口

php-cli在命令行下面直接运行php,这个时候php的生命周期也就是脚本结束了,php的生命周期也就over了。

目前,CLI模式下执行php脚本的情况比较少,究其原因是无法满足复杂的业务需要,也不能传递post参数、上传文件,ui交互较差,更适合开发人员使用。

php-cgi

Common Gateway Interface 公共网关接口

php-cgi就是一个协议(与http一样),是一种与语言无关的协议,规定传输哪些数据、以什么样的格式传递给后方处理的一个协议,然后php就会启动解析器,初始化环境,然后处理请求,退出程序。

php-cgi的大致工作流程如下:

  1. 初始化 php 的各种变量
  2. 调用并初始化 zend 虚拟机
  3. 加载并解析 php.ini
  4. 激活 zend
    1. zend 加载 a.php ,并做词法/语法分析
    2. 编译 a.php 为 opcode ,并执行
    3. 输出结果
    4. 关闭 zend 虚拟机
  5. 返回结果给 web server (nginx 、apache)

CGI 模式也称为 fork-execute-kill 模式:每当有一个请求过来时, web server 都会启动一个 php-cgi 去处理这个请求。请求完成之后,php-cgi 就会自动销毁。对于 QPS 较小的情况下,没问题。但是对于大量的 QPS 时,这个响应就会比较慢。因为 web server 在创建一个 php-cgi 时,都要给其分配内存和其他资源,QPS较大时,就会造成资源紧张,从而造成响应变长。

cgi 解释器的反复加载是 cgi 性能低下的主要原因。

fastcgi

fastcgi 也是一种协议。fastcgi 是 cgi 的升级版,提升点在 php-cgi预生成 与 常驻内存。

预生成:在请求达到 php-cgi 之前就生成一定数量的 php-cgi 。
常驻内存:php-cgi 在处理过一个请求之后并不会销毁,它会一直存在,等待着下一个php-fpm 分配下一个请求。

因为是预生成了一定数量的 php-cgi ,所以当 web server 转发过来了一个请求,如果每个 php-cgi 都尝试处理,就会造成 ”惊群效应“ ,于是就需要一个管理器进行调度它们,这个管理器,就是 php-fpm 。

fastcgi 优点:工作效率非常高。
fastcgi 缺点:因为是多进程,所以 cgi 多线程会消耗服务器更多的内存。

php-fpm

php-fpm 是 php-cgi 的进程管理器。(这是一个实现了 fastcgi 协议的程序)

cgi 协议时,php-cgi 的启动是受 web server 控制的;
fastcgi 协议时,php-cgi 的启动跟web server 就没关系了,只受 php-fpm 的调度。

当 web server 转发来了一些请求时,需要先经过 php-fpm 的调度,之后再由 php-fpm 控制这个请求具体交给哪个 php-cgi 处理。

php-fpm.conf

这是php-fpm的配置文件。

配置子进程数量

在该文件内可以配置php-fpm的子进程数量,以及子进程的管理方式。

pm = static

​ dynamic

​ ondemand

相关配置文件内容如下:

; Choose how the process manager will control the number of child processes.
; Possible Values:
;   static  - a fixed number (pm.max_children) of child processes;
              采用固定的子进程数量,可以提高性能,但是会占用大量内存-如果配置进程数过多,会占用90%以上内存。
              可能需要经常重启来释放内存。

;   dynamic - the number of child processes are set dynamically based on the
;             following directives. With this process management, there will be
;             always at least 1 children.
              动态的子进程数量,可以平衡性能与内存占用。需要注意下面的配置项。

;             pm.max_children      - the maximum number of children that can
;                                    be alive at the same time.
;             pm.start_servers     - the number of children created on startup.
;             pm.min_spare_servers - the minimum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is less than this
;                                    number then some children will be created.
;             pm.max_spare_servers - the maximum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is greater than this
;                                    number then some children will be killed.
;  ondemand - no children are created at startup. Children will be forked when
;             new requests will connect. The following parameter are used:
              按需配置,用的比较少。

;             pm.max_children           - the maximum number of children that
;                                         can be alive at the same time.
;             pm.process_idle_timeout   - The number of seconds after which
;                                         an idle process will be killed.
; Note: This value is mandatory.
pm = dynamic

; The number of child processes to be created when pm is set to 'static' and the
; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'.
; This value sets the limit on the number of simultaneous requests that will be
; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
; CGI. The below defaults are based on a server without much resources. Don't
; forget to tweak pm.* to fit your needs.
; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'
; Note: This value is mandatory.
pm.max_children = 256

; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 40

; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.min_spare_servers = 20

; The desired maximum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.max_spare_servers = 60

​ 配置 pm.max_children时,可以按照每个php-fpm进程占用20~30MB内存大小来计算。当 pm=static 时,子进程的数量不宜过多,否则会造成占用大量内存,可能会使服务器内存占用一直90%+,存在隐患。

配置php-fpm状态页

php-fpm内置了一个状态页,需要通过修改配置文件来开启,展示了当前php-fpm的一些信息。

php-fpm.conf 配置项如下:

pm.status_path = /status
该配置项一般都是注释状态,根据自己的需要开启即可。也可以修改成其他访问路径

配置状态页的步骤

  1. 开启php-fpm.confpm.status_path 的配置项,并重启php-fpm。

  2. 增加nginx相关站点配置文件一个解析条件,之后重启nginx:

    location = /status {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
  3. 通过浏览器访问 http://xxx.com/status 即可查看php-fpm的状态页。后面也有可选参数:

    1. http://xxx.com/status
    2. http://xxx.com/status?json ,返回json格式内容
    3. http://xxx.com/status?html ,返回html格式内容
    4. http://xxx.com/status?xml ,返回xml格式内容
    5. http://xxx.com/status?full ,可以展示全部子进程的运行情况

状态页的展示内容效果如下

pool:                 www
process manager:      static
start time:           01/Jul/2011:17:53:49 +0200
start since:          62636
accepted conn:        190460
listen queue:         0
max listen queue:     1
listen queue len:     42
idle processes:       4
active processes:     11
total processes:      15
max active processes: 12  //FPM启动后最大活跃子进程数量,可以作为配置子进程数量的一个参考值。
max children reached: 0

参考内容:Nginx开启php-fpm状态页及状态详解-腾讯云开发者社区-腾讯云

标签:cgi,php,FPM,配置,number,fpm,PHP,children,pm
From: https://www.cnblogs.com/liulog/p/18561220

相关文章

  • NotePad++ 安装Zen coding 完美支持PHP
    NotePad++ 安装Zencoding完美支持PHP依据Html或css增加自动补全,发现PHP的美元符转义为数字1,或2或3配置路径为: \Notepad++\plugins\NppScripting\includes\ZenCoding.js在varzen_settings中增加 'phpSymbol':'$',  在调用时${phpSymbol} 即可自动补全带有美......
  • K8S集群ImagePolicyWebhook配置
    ImagePolicyWebhook用于限制节点调用某个镜像环境查看系统环境#cat/etc/redhat-releaseRockyLinuxrelease9.3(BlueOnyx)#uname-aLinuxRocky9K8SMaster0030215.14.0-362.18.1.el9_3.0.1.x86_64#1SMPPREEMPT_DYNAMICSunFeb1113:49:23UTC2024x86_64x8......
  • 6. Spring Cloud Gateway网关超详细内容配置解析说明
    6.SpringCloudGateway网关超详细内容配置解析说明文章目录6.SpringCloudGateway网关超详细内容配置解析说明前言1SpringCloudGateway概述1.1SpringCloudGateway网关的核心功能1.2SpringCloudGatewayVSZuul的区别1.3SpringCloudGateway的基本原......
  • filebeat配置解析(待续)
    目录   filebeat概览       filebeat是如何工作的       工作原理           采集日志           注册表           发送日志   容器日志采集的三种方式       方式一:Filebeat与应用运行在同一容器(不推荐)......
  • VINS-Mono配置记录
    Ceres要安装与现有的Eigen3.3.7和CMake3.16.3兼容的CeresSolver,可以按照以下步骤操作:1.下载与Eigen3.3.7兼容的CeresSolver根据Eigen版本和CeresSolver的兼容性要求,推荐使用CeresSolver1.14,因为它支持Eigen3.3.x。你已经下载了CeresSolver1.14,因......
  • 国标GB28181-2016平台LiteGBS国标GB28181公网直播接入设备端怎么配置GB28181参数
    LiteGBS国标GB28181公网直播是一款强大的基于国标GB28181协议的视频云服务平台,它支持多路设备同时接入,在安防领域发挥着重要作用。LiteGBS国标GB28181-2016平台可进行解码、处理、分发等服务,能将接入的视频流转换为多种格式,如RTSP、RTMP、FLV、HLS、WebRTC等,兼容全平台、全终端,满......
  • MyBatis-Plus 学习笔记-注解配置
    本文详细介绍了MyBatisPlus注解的用法及属性。@TableName(表名称)该注解用于指定实体类对应的数据库表名。当实体类名与数据库表名不一致,或者实体类名不是数据库表名的驼峰写法时,您需要使用这个注解来明确指定表名。/***数据库表相关*@Documented表示该注解将被javad......
  • STP的基本配置
    STP个人实验笔记1.实验拓扑SW1和SW2基本配置sysvlanbatch1020intg0/0/1portlink-typetrunkporttrunkallow-passvlanallintg0/0/2portlink-typetrunkporttrunkallow-passvlanallSW3和SW4基本配置sysvlanbatch1020intg0/0/1portlink-type......
  • 学习笔记(四十):HMRouter简介和配置
    概述:HMRouter作为HarmonyOS的页面跳转场景解决方案,聚焦解决应用内原生页面的跳转逻辑。HMRouter底层对系统Navigation进行封装,集成了Navigation、NavDestination、NavPathStack的系统能力,提供了可复用的路由拦截、页面生命周期、自定义转场动画,并且在跳转传参、额外的生命周期......
  • 低配置硬件搭建家庭监控系统
    背景需求:某位同志曾经说过:中国人愿意用隐私换取便利。如今监控系统还是很成熟的,功能也很多,网上买个摄像头就可以实现网页也好,手机端也好的视频直播和监控录像回放,还有各种各样功能;但是作为一个家庭监控来说,这些功能太智能了,而且连接到的是厂商的大数据服务器中心,应该会用于各种......