php / php/php-src

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

Aperta
#22,531 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Bug SAPI: fpm Status: Needs Triage
Lingua principale
C
Stelle
40.4k
Fork
8.1k
Merge medio
2g 13h
PR unite (30g)
96

Descrizione

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

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia riproducendo il comportamento con PHP-FPM 8.5.7, Apache mod_proxy_fcgi, socket Unix e le configurazioni minima e ottimizzata descritte qui. Confronta gli stati dei worker in /fpm-status con le osservazioni esterne e stabilisci se la discrepanza risiede nelle transizioni delle richieste di PHP-FPM o nel riutilizzo delle connessioni Apache; il lavoro è completato quando sono disponibili una causa confermata e un test di regressione mirato o una correzione riproducibile.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
apache, php
Ambito
backend
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Tranquilla
Chiarezza
Da chiarire
Idoneità per principianti
38/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.