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

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

nanshan 2025-02-03 14:20 12 浏览 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

相关推荐

0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)

文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...

ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes

为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...

生产环境starrocks 3.1存算一体集群部署

集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...

在CentOS上添加swap虚拟内存并设置优先级

现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...

国产深度(deepin)操作系统优化指南

1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...

postgresql-15.4 多节点主从(读写分离)

1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...

Docker 容器 Java 服务内存与 GC 优化实施方案

一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...

虚拟内存设置、解决linux内存不够问题

虚拟内存设置(解决linux内存不够情况)背景介绍  Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...

Elasticsearch性能调优(5):服务器配置选择

在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...

Es如何落地

一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...

针对Linux内存管理知识学习总结

现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...

MySQL进阶之性能优化

概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...

Linux Cgroups(Control Groups)原理

LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...

linux 常用性能优化参数及理解

1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...

如何在 Linux 中使用 Sysctl 命令?

sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...

取消回复欢迎 发表评论: