2024 年 PHP 日本大会

状态页面

此页面提供有关 FPM 状态页面设置和内容的信息。另见 fpm_get_status()

配置

可以通过在 FPM 池配置中设置 pm.status_path 配置参数来启用 FPM 状态页面。

警告

出于安全考虑,应将 FPM 状态页面限制为仅内部请求或已知客户端 IP,因为该页面会显示请求 URL 和有关可用资源的信息。

根据 Web 服务器配置,可能需要配置 Web 服务器以允许直接向此路径发出请求,绕过任何 PHP 脚本。使用侦听 UDS 的 FPM 和 pm.status_path 设置为 /fpm-status 的 Apache 配置示例如下所示

<LocationMatch "/fpm-status">
 Order Allow,Deny
 Allow from 127.0.0.1
 ProxyPass "unix:/var/run/php-fpm.sock|fcgi://127.0.0.1/fpm-status"
</LocationMatch>

重新加载或重新启动 FPM 和 Web 服务器后,状态页面将可从浏览器访问(只要请求来自允许的 IP 地址,如果配置了 IP 限制)。

查询参数

可以通过指定以下查询参数之一来更改状态页面输出的格式

  • html
  • json
  • openmetrics
  • xml

还可以使用 full 查询参数返回其他信息。

示例状态页面 URL

  • https://127.0.0.1/fpm-status - 默认文本格式的简要输出
  • https://127.0.0.1/fpm-status?full - 默认文本格式的完整输出
  • https://127.0.0.1/fpm-status?json - JSON 格式的简要输出
  • https://127.0.0.1/fpm-status?html&full - HTML 格式的完整输出

显示的信息

日期/时间值在 JSON 和 XML 输出中使用 Unix 时间戳格式,否则使用以下示例日期 "03/Jun/2021:07:21:46 +0100" 生成的格式。

基本信息 - 始终显示在状态页面上
参数 描述
pool FPM 进程池的名称。
进程管理器 进程管理器类型 - static、dynamic 或 ondemand。
启动时间 上次启动进程池的日期/时间。
启动至今 自上次启动进程池以来的秒数。
已接受连接 已接受连接的总数。
监听队列 当前正在等待空闲进程的请求数(积压)。
最大监听队列 在任何时候在监听队列中看到的最大请求数。
监听队列长度 监听队列允许的最大大小。
空闲进程 当前空闲(等待请求)的进程数。
活动进程 当前正在处理请求的进程数。
总进程数 当前进程总数。
最大活动进程 并发活动进程的最大数量。
已达到最大子进程数 是否曾经达到最大进程数?如果是,则显示的值大于或等于 1,否则值为 0
缓慢请求 达到已配置的 request_slowlog_timeout 的请求总数。
每个进程的信息 - 仅在 full 输出模式下显示
参数 描述
pid 进程的系统 PID。
状态 进程的状态 - 空闲、运行……
启动时间 进程启动的日期/时间。
启动至今 自进程启动以来的秒数。
请求 已服务的请求总数。
请求持续时间 为上次请求服务所花费的总微秒数。
请求方法 上次服务的请求的 HTTP 方法。
请求 URI 上次服务的请求的 URI(Web 服务器处理后,如果您使用前端控制器模式重定向,它可能始终为 /index.php)。
内容长度 上次请求的请求正文长度(以字节为单位)。
用户 上次请求的 HTTP 用户(PHP_AUTH_USER)。
脚本 上次请求执行的脚本的完整路径。如果不可用(例如状态页面请求),则为 '-'
上次请求 CPU 上次请求的 %cpu。如果进程未空闲,则值为 0,因为计算是在请求处理完成后完成的。该值可以超过 100%,因为指标将说明上次请求中使用了总 CPU 时间的百分比 - 考虑所有核心上的进程,而 100% 仅适用于一个核心。
上次请求内存 上次请求消耗的最大内存量。如果进程未空闲,则值为 0,因为计算是在请求处理完成后完成的。

注意:

所有值都是特定于池的,并在 FPM 重新启动时重置。

注意:

OpenMetrics 格式输出使用不同的参数类型以更好地适应 OpenMetrics 格式。其值的参数和说明包含在 OpenMetrics 格式输出中。

变更日志

版本 描述
8.1.0 添加了 openmetrics 格式。
添加注释

用户贡献的注释 2 条注释

uwe at ohse dot de
2 年前
在其他人误解之前
"请求持续时间 为服务请求所花费的总秒数"

这不是该进程完成的所有请求的总时间,而是该进程完成的上次请求(空闲状态)或当前请求(所有其他状态)所用的时间。

并且给出的数字不是以秒为单位,而是以微秒为单位。

fpm 状态文档很混乱。
nospam at briat dot org
1 天前
记录在案,如果您不使用 socks(远程 php-fpm),则需要在您的 vhost 中添加以下行
ProxyPassMatch ^/status$ fcgi://[FPM-HOST]:[FPM-PORT]/status
To Top