php / php/php-src

Observed worker state inconsistencies under Apache mod_proxy_fcgi with connection reuse (PHP-FPM 8.5.6)

未关闭
#22,531 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

Bug SAPI: fpm Status: Needs Triage
主要语言
C
星标
40.4k
派生
8.1k
平均合并
2 天 13 小时
30 天内合并 PR
96

描述

Description

Environment

  • PHP-FPM: 8.5.6
  • Process manager: pm = dynamic
  • Typical pool configuration:
    • pm.max_children defined (value respected and stable)
    • pm.start_servers, pm.min_spare_servers, pm.max_spare_servers standard tuning
    • pm.max_requests = 500
  • Backend: Apache HTTP Server
  • FastCGI handler: mod_proxy_fcgi
  • Transport: Unix socket
  • Relevant proxy configuration:
    <Proxy "fcgi://handler/" enablereuse=on flushpackets=on max=10>

Additional working configuration (mitigating issue)

The following configuration appears to resolve or significantly reduce the observed behavior:

<Proxy "fcgi://handler/" enablereuse=on flushpackets=auto smax=2 max=12 acquire=1000 ttl=10 timeout=60 connectiontimeout=300ms>


Observed behavior (problematic configuration)

When using the simplified proxy configuration with connection reuse enabled:

  • Workers in PHP-FPM appear to remain in intermediate states such as reading headers longer than expected.
  • /fpm-status shows discrepancies in perceived worker activity (notably higher "active" states than expected based on external observation).
  • Idle/spare worker management appears delayed or not aligned with expected request completion cycles.
  • max_spare_servers behavior appears inconsistent with expected worker availability under idle load conditions.
  • The issue is reproducible and deterministic under sustained use of persistent FastCGI connection reuse.

Observed behavior (tuned configuration)

With explicit tuning of Apache FastCGI proxy pooling parameters:

  • Worker state transitions appear consistent and timely.
  • Idle/spare worker management behaves as expected.
  • No persistent reading headers state anomalies observed.
  • /fpm-status metrics appear stable and consistent with external process observation.

Notes on reproducibility

  • Issue is reproducible under Apache mod_proxy_fcgi only with:
    • enablereuse=on
    • minimal or default proxy pool tuning
  • Behavior changes significantly when introducing:
    • ttl
    • acquire
    • connectiontimeout
    • constrained pool size (smax, max)

Hypothesis (not confirmed)

It is not confirmed whether this behavior is caused by:

  • PHP-FPM internal worker state machine handling
  • Apache mod_proxy_fcgi connection reuse behavior
  • Interaction between FastCGI persistent connections and request lifecycle completion signaling

However, the observed behavior suggests a possible desynchronization between:

  • actual request completion at PHP execution level
  • worker state transition to idle within PHP-FPM
  • FastCGI connection reuse lifecycle on the proxy side

Relation to /fpm-status discrepancies

It is not confirmed whether this issue is directly related to known discrepancies observed in /fpm-status (e.g. inconsistencies in reported active worker counts under certain conditions).

However, both phenomena share a common dependency on:

  • worker state transition timing
  • FastCGI connection reuse behavior
  • request lifecycle completion signaling (reading headers / transition states)

This suggests a possible shared underlying factor, although no direct causality is claimed.


Important clarification

This report is based on observations from an Apache + PHP-FPM setup. Equivalent behavior under Nginx has not been directly evaluated in this context, although similar FastCGI reuse patterns may be relevant.


Summary

  • Reproducible worker state inconsistencies observed under Apache mod_proxy_fcgi with connection reuse enabled.
  • Behavior strongly influenced by proxy connection pooling parameters.
  • Mitigation achieved via explicit tuning of reuse, TTL, and connection limits.
  • Root cause not confirmed; likely interaction between FastCGI reuse lifecycle and PHP-FPM worker state transitions.
  • Possible, but unconfirmed, relation to /fpm-status inconsistencies.
PHP Version
PHP 8.5.7 (cli) (built: Jun 10 2026 20:19:22) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.5.7, Copyright (c) Zend Technologies
    with Zend OPcache v8.5.7, Copyright (c), by Zend Technologies
Operating System

No response

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

首先,使用 PHP-FPM 8.5.7、Apache mod_proxy_fcgi、Unix 套接字,以及此处所述的最小 配置和调优后的 配置来复现该行为。将 /fpm-status 中的 worker 状态与外部观测结果进行比较,并确定差异究竟出在 PHP-FPM 的请求状态转换,还是出在 Apache 的连接复用上;完成的标准是确认原因,并提供一个有针对性的回归测试或可复现的修复。

由索引模型根据 Issue 内容生成。

评估

技术栈
apache, php
领域
backend
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
冷清
描述清晰度
需要澄清
新手友好度
38/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。