百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

PHP-FPM 学习记录(php fpm cli)

off999 2025-04-08 17:34 8 浏览 0 评论

什么是FastCGI

请阅读FastCGI(Fast Common Gateway Interface)的理解

这里不再赘述

什么是(PHP-FPM)

  1. PHP5.4之前只是用来管理php-cgi进程的进程管理器,实现了fastCGI协议的程序
  2. PHP官方从PHP5.4版本将PHP-FPM集成到了PHP官方发布的包中,这时PHP-FPM同时具备进程管理器及PHP解释器的能力,直接把php解释器的功能集成进PHP-FPM了

PHP-FPM具备哪些功能

  • 支持平滑停止/启动的高级进程管理功能

PHP-FPM进程是由一个master进程和多个work进程配合工作。master进程主要管理事件信号接受和分发。所有的请求都是由work进程处理并将处理结果返回。

master接收到重启或重载配置文件的信号后,会通知所有的work进程不再接收新的请求。master会另起新的work进程来处理新的请求。然后会通知旧的work进程处理完成正在进行的工作后退出,运用此原理实现平滑停止和启动

  • 可以工作于不同的uid/gid/chroot环境下,并监听不同的端口和使用不同的php.ini配置文件(可取代safe_mode的设置)

gid为groupid,即组id,用来标识用户组的唯一标识符;uid为userid,即用户id,用来标识每个用户的唯一标示符。用户组:将同一类用户设置为同一组,如可将所有的系统管理员设置为admin组,便于分配权限,将某些重要的文件设置为所有admin组用户可以读写,这样可以进行权限分配,每个用户有一个唯一的用户id,每个用户组都有唯一的组id。charoot为change root,就是改变程序执行时所参考的根目录位置,可以增进系统的安全性,限制使用者能做的事。safe_mode是一种安全模式。

  • stdout 和 stderr 日志记录

标准输出和标准错误日志记录

  • OPcode被意外破坏时紧急重启
  • 文件上传优化支持
  • 支持慢日志记录
  • FastCGI 的增强功能

例如 fastcgi_finish_request() - 一个特殊的函数来完成请求并刷新所有数据,同时继续做一些耗时的事情(视频转换、统计处理等)

PHP-FPM配置说明

1、php-fpm.conf全局配置说明

pid:需要配置一个文件路径,用来存储master的进程id;示例:

pid = /etc/php-fpm.pid

error_log:错误日志的存储位置。默认:#INSTALL_PREFIX#/log/php-fpm.log。 如果设置为 "syslog",日志将不会写入本地文件,而是发送到 syslogd。示例:

error_log = /var/log/php-fpm/error.log

log_level:错误级别。可用级别为:alert(必须立即处理),error(错误情况),warning(警告情况),notice(一般重要信息),debug(调试信息)。默认:notice。示例:

log_level = notice

syslog.facility:设置何种程序记录消息,默认值:daemon,记录linux系统日志。示例:

syslog.facility = daemon

syslog.ident:为每条信息添加前缀。 如果在同一台服务器上运行了多个 FPM 实例,可以修改此默认值来满足需求。默认值:php-fpm。示例:

syslog.ident = php-fpm

log_limit:设置日志文件单行字符数上限。如果超出此方向,会进行换行处理。默认是1024字节

log_limit = 4096

log_buffering:日志是否记录缓冲区。默认值true,如果设置为no,会直接写入日志文件

log_buffering = no


emergency_restart_threshold
(int):如果子进程在
emergency_restart_interval 设定的时间内收到该参数设定次数的 SIGSEGV 或者 SIGBUS退出信息号,则FPM会重新启动。0 表示“关闭该功能”。默认值:0(关闭)。示例:

emergency_restart_threshold = 100


emergency_restart_interval(
mixd):用于设定平滑重启的间隔时间。这么做有助于解决加速器中共享内存的使用问题。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。示例:

emergency_restart_interval = 60s

process_control_timeout(mixd):设置子进程接受主进程复用信号的超时时间。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。即reload的时候,如果有正在执行的请求进程便会等待该进程设置的时长。而其他进程直接就结束掉。等待正在执行的进程执行完或者是超过了设置的时间后fpm的master进程才开始生成新的fpm worker进程.示例:

process_control_timeout = 60s

process.max(int):Fork 的最大 FPM work进程数。使用动态管理进程数量时,此设计可以控制在一个进程池内的全局进程数量,pm=dynamic模式下生效。 使用需谨慎。默认值:0,为不限制。示例:

process.max = 128

process.priority (int):

指定要应用于主进程的nice(2)优先级(仅在设置时)该值可以在-19(最高优先级)到20(最低优先级)之间变化,示例:

process.priority = -19

注意:只有当FPM主进程以root用户身份启动时,它才会工作-除非另有规定,否则池进程将继承主进程优先级

daemonize (bool):设置 FPM 在后台运行。设置“no”将 FPM 保持在前台运行用于调试。默认值:yes。示例:

daemonize = no

注意:如果是通过dockerfile来启动php-fpm服务,这个就需要设置为no,否则php-fpm无法通过启动容器 同时启动(已踩过此坑)

rlimit_files (int):设置 master 进程打开文件描述符的 rlimit 数量,可使用 ulimit -n 查看。默认为系统默认值。示例:

rlimit_files = 1024

rlimit_core :设置核心rlimit最大限制值. 可用值: ‘unlimited’ 、0或者正整数. 默认值: 系统定义值,示例:

rlimit_core = 0

events.mechanism (string):设置 FPM 使用的事件机制。 可用以下选项:select、

pool、epoll、kqueue (*BSD)、port (Solaris)。 默认值:不设置(自动检测)。示例:

events.mechanism = epoll

systemd_interval (int):使用 systemd 集成的 FPM 时,设置间歇秒数,报告健在通知给 systemd。 设置为 0 表示禁用。默认值:10.示例:

systemd_interval = 10

2、运行配置

prefix (string):检测路径时使用的前缀。示例:

prefix = /path/to/pools/$pool

user (string):FPM 进程运行的Unix用户。必须设置。示例:

user = apache

group (string):FPM 进程运行的 Unix 用户组。如果不设置,就使用默认用户的用户组,示例:

group = apache

listen (string):设置接受 FastCGI 请求的地址。可用格式为:'ip:port','port','/path/to/unix/socket'。每个进程池都需要设置。示例:

listen = [::]:9000

注意:当web server 与应用服不是同一台(或不是同一个容器时)时,这里不能设置为127.0.0.1:9000,这样时不通的,(已踩坑)

listen.backlog (int):设置 listen(2) 的 backlog 最大值。“-1”表示无限制。默认值(php7.4):511。示例:

listen.backlog = 511

listen.allowed_clients (string):设置允许连接到 FastCGI 的服务器 IPV4 地址。等同于 PHP FastCGI (5.2.2+) 中的 FCGI_WEB_SERVER_ADDRS 环境变量。仅对 TCP 监听起作用。每个地址是用逗号分隔的,如果没有设置或者为空,则允许任何服务器请求连接。默认值:any。 PHP 5.5.20 和 5.6.4起,开始支持 IPv6 地址。示例:

listen.allowed_clients = 127.0.0.1,192.168.2.25


listen.owner/listen.group/listen.mode
(string):如果使用了 Unix 套接字,表示它的权限。在 Linux 中必须设置读/写权限,以便用于 WEB 服务器连接。 在很多 BSD 派生的系统中可以忽略权限允许自由连接。 默认值:运行所使用的用户和组,权限为 0660。示例:

listen.owner = user
listen.group = usergroup
listen.mode = 0660

listen.acl_users (string):当系统支持 POSIX ACL(Access Control Lists)时,可以设置使用此选项。 当设置了的时候,将会忽略 listen.owner 和 listen.group。 值是逗号分割的用户名列表。 PHP 5.6.5 起可用。示例:

listen.acl_users = apache,nginx

listen.acl_groups (string):作用和listen.acl_users同理,值是逗号分割的用户组名称列表。 PHP 5.6.5 起可用。

listen.acl_groups =apache,nginx

pm (string):设置进程管理器如何管理子进程。可用值:static,ondemand,dynamic。必须设置。static - 子进程的数量是固定的(通过pm.max_children)。ondemand - 进程在有需求时才产生(当请求时才启动。与 dynamic 相反,在服务启动时 pm.start_servers 就启动了。dynamic - 子进程的数量在下面配置的基础上动态设置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers。示例:

pm = dynamic

pm.max_children (int):pm 设置为 static 时表示创建的子进程的数量,pm 设置为 dynamic 时表示最大可创建的子进程的数量。必须设置。示例:

pm.max_children = 30

pm.start_servers (int):设置启动时创建的子进程数目。仅在 pm 设置为 dynamic 时使用。默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。示例:

pm.start_servers = 5

pm.min_spare_servers (int):设置空闲服务进程的最低数目。仅在 pm 设置为 dynamic 时使用。必须设置,示例:

pm.min_spare_servers = 5

pm.max_spare_servers (int):设置空闲服务进程的最大数目。仅在 pm 设置为 dynamic 时使用。必须设置,示例:

pm.max_spare_servers = 30

pm.process_idle_timeout (mixd):秒数,多久之后结束空闲进程。 仅当设置 pm 为 ondemand。 可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:10s。示例:

pm.process_idle_timeout = 10s

pm.max_requests (int):设置每个子进程在处理了多少个请求数量之后就重启。如果设置为 '0' 则一直接受请求,不重启,等同于 PHP_FCGI_MAX_REQUESTS 环境变量。默认值:0。示例:

pm.max_requests = 300


pm.status_path (string):FPM 状态页面的网址。如果没有设置,则无法访问状态页面,默认值:无。示例:

pm.status_path = /fpmStatus

效果:



ping.path (string):FPM 监控页面的 ping 网址。如果没有设置,则无法访问 ping 页面。该页面用于外部检测 FPM 是否存活并且可以响应请求。请注意必须以斜线开头(/);示例:

ping.path = /fpm_ping

效果:


ping.response (string):用于定义 ping 请求的响应返回内容。返回为 HTTP 200 的 text/plain 格式文本。默认值:pong。示例:

ping.response = 200

效果:


process.priority (int):设置 worker 的 nice(2)优先级(如果设置了的话)。 该值从 -19(最高优先级) 到 20(更低优先级)。 默认值:不设置。示例:

process.priority = -19

access.log (string):Access log 文件。 默认值:不设置

access.log = /var/logs/php-fpm.access.log

access.format (string):access log 的格式。 默认值: "%R - %u %t \"%m %r\" %s",示例:

access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"

slowlog (srting):慢日志文件及路径,示例:

slowlog = /var/log/php-fpm/www-slow.log

request_slowlog_timeout (mixed):记录慢日志的请求时间阀值,当一个请求处理时间超出该配置后,会记录到slowlog中。设置为 '0' 表示 'Off'。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。

request_slowlog_timeout = 3s

request_terminate_timeout (mixd):设置单个请求的超时中止时间。该选项可能会对 php.ini 设置中的 'max_execution_time' 因为某些特殊原因没有中止运行的脚本有用。设置为 '0' 表示 'Off'。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。示例:

request_terminate_timeout = 10s

chroot (string):启动时的 Chroot 目录。所定义的目录需要是绝对路径。如果没有设置,则 chroot 不被使用。示例:

chroot = /dir

chdir (string):设置启动目录,启动时会自动 Chdir 到该目录。所定义的目录需要是绝对路径。默认值:当前目录,或者根目录(chroot时)。示例:

chdir = /var/www

catch_workers_output (boolean):重定向运行过程中的 stdout 和 stderr 到主要的错误日志文件中。如果没有设置,stdout 和 stderr 将会根据 FastCGI 的规则被重定向到 /dev/null。默认值:无。示例:

catch_workers_output = yes

clear_env (boolean):为 FPM worker 进程清除环境变量。 在进程池配置文件里设置环境变量前,阻止任意系统的环境变量进入 FPM worker 进程。 自 PHP 5.4.27、 5.5.11 和 5.6.0 起。 默认值: Yes,示例:

clear_env = yes

security.limit_extensions (string):限制 FPM 允许解析的脚本扩展名。 此设置可以预防 web 服务器配置的错误。 应当限制 FPM 仅仅解析 .php 扩展名,阻止恶意用户使用其他扩展名运行 php 代码。 默认值: .php .phar,示例:

security.limit_extensions = .php

相关推荐

Python 数据分析——利用Pandas进行分组统计

话说天下大势,分久必合,合久必分。数据分析也是如此,我们经常要对数据进行分组与聚合,以对不同组的数据进行深入解读。本章将介绍如何利用Pandas中的GroupBy操作函数来完成数据的分组、聚合以及统计...

python数据分析:介绍pandas库的数据类型Series和DataFrame

安装pandaspipinstallpandas-ihttps://mirrors.aliyun.com/pypi/simple/使用pandas直接导入即可importpandasas...

使用DataFrame计算两列的总和和最大值_[python]

【如果对您有用,请关注并转发,谢谢~~】最近在处理气象类相关数据的空间计算,在做综合性计算的时候,DataFrame针对每列的统计求和、最大值等较为方便,对某行的两列或多列数据进行求和与最大值等的简便...

8-Python内置函数

Python提供了丰富的内置函数,这些函数可以直接使用而无需导入任何模块。以下是一些常用的内置函数及其示例:1-print()1-1-说明输出指定的信息到控制台。1-2-例子2-len()2-1-说...

Python中函数式编程函数: reduce()函数

Python中的reduce()函数是一个强大的工具,它通过连续地将指定的函数应用于序列(如列表)来对序列(如列表)执行累积操作。它是functools模块的一部分,这意味着您需要在使用它之...

万万没想到,除了香农计划,Python3.11竟还有这么多性能提升

众所周知,Python3.11版本带来了较大的性能提升,但是,它具体在哪些方面上得到了优化呢?除了著名的“香农计划”外,它还包含哪些与性能相关的优化呢?本文将带你一探究竟!作者:BeshrKay...

最全python3.11版12类75个内置函数大全

获取全部内置函数:importbuiltins#导入模块yc=[]#异常属性nc=[]#不可调用fn=[]#内置函数defll(ty=builtins):...

软件测试笔试题

测试工程师岗位,3-5年,10-14k1.我司有一款产品,类似TeamViewer,向日葵,mstsc,QQ远程控制产品,一个PC客户端产品,请设想一下测试要点。并写出2.写出常用的SQL语句8条,l...

备战各大互联网巨头公司招聘会,最全Python面试大全,共300题

前言众所周知,越是顶尖的互联网公司在面试这一part的要求就越高,需要你有很好的技术功底、项目经验、一份漂亮的简历,当然还有避免不了的笔试过关。对于Python的工程师来说,全面掌握好有关Python...

经典 SQL 数据库笔试题及答案整理

马上又是金三银四啦,有蛮多小伙伴在跳槽找工作,但对于年限稍短的软件测试工程师,难免会需要进行笔试,而在笔试中,基本都会碰到一道关于数据库的大题,今天这篇文章呢,就收录了下最近学员反馈上来的一些数据库笔...

用Python开发日常小软件,让生活与工作更高效!附实例代码

引言:Python如何让生活更轻松?在数字化时代,编程早已不是程序员的专属技能。Python凭借其简洁易学的特点,成为普通人提升效率、解决日常问题的得力工具。无论是自动化重复任务、处理数据,还是开发个...

太牛了!102个Python实战项目被我扒到了!建议收藏!

挖到宝了!整整102个Python实战项目合集,从基础语法到高阶应用全覆盖,附完整源码+数据集,手把手带你从代码小白变身实战大神!这波羊毛不薅真的亏到哭!超全项目库,学练一站式搞定这份资...

Python中的并发编程

1.Python对并发编程的支持多线程:threading,利用CPU和IO可以同时执行的原理,让CPU不会干巴巴等待IO完成。多进程:multiprocessing,利用多核CPU...

Python 也有内存泄漏?

1.背景前段时间接手了一个边缘视觉识别的项目,大功能已经开发的差不多了,主要是需要是优化一些性能问题。其中比较突出的内存泄漏的问题,而且不止一处,有些比较有代表性,可以总结一下。为了更好地可视化内存...

python爬虫之多线程threading、多进程、协程aiohttp批量下载图片

一、单线程常规下载常规单线程执行脚本爬取壁纸图片,只爬取一页的图片。importdatetimeimportreimportrequestsfrombs4importBeautifu...

取消回复欢迎 发表评论: