[php-src] Issue #18956: PHP-FPM Process Count Inconsistencies
| From: | sylvesterdamgaard | Date: | Fri, 27 Jun 2025 09:34:51 +0000 |
| Subject: | [php-src] Issue #18956: PHP-FPM Process Count Inconsistencies | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-250337@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/18956
Author: sylvesterdamgaard
### Description
## Summary
PHP-FPM continues to report inaccurate process counts in 2025, with active processes showing as
extremely low even under high load. This appears to be a continuation or regression of bug #76003,
which was supposedly fixed in April 2022.
## Description
The PHP-FPM status endpoint reports inconsistent and incorrect process counts, specifically:
- "active processes" showing as very low (often 1-3) during periods of high traffic
- Manual process state counting reveals many processes in "Running" and other active
states
- Discrepancy between calculated active processes and FPM's reported active count
## Steps to Reproduce
1. Set up PHP-FPM with moderate traffic (50+ concurrent requests)
2. Query FPM status endpoint:
http://localhost/fmp-status?json&full`
3. Compare active processes field with manual state counting
4. Observe discrepancy between reported and actual active processes
## Expected Result
- active processes should equal the sum of all non-idle process states
- Count should reflect actual load and match manual calculations
## Actual Result
- active processes shows artificially low numbers (1-5) during high load
- Manual state counting shows 20-40+ processes in active states
- Creates monitoring confusion and incorrect capacity planning
## Debug session
Video which displays the counts from process list and from the php-fpm summaries.
FPM reported is the raw active processes, idle processes and total processes
The other values are calculated based in the proccess list states.
https://vimeo.com/1096855168?share=copy
## Simple Test Script
```php
<?php
// Enhanced monitoring script that reveals the discrepancy
$fmpStatus = file_get_contents('http://localhost:8080/fmp-status?json&full');
$fmp = json_decode($fmpStatus, true);
$stateCounts = ['Idle' => 0, 'Running' => 0, 'Reading headers'
=> 0, /* etc */];
foreach ($fmp['processes'] as $process) {
$stateCounts[$process['state']]++;
}
$calculatedActive = count($fmp['processes']) - $stateCounts['Idle'];
$reportedActive = $fmp['active processes'];
echo "Calculated active: {$calculatedActive}\n";
echo "FPM reported active: {$reportedActive}\n";
echo "Discrepancy: " . ($calculatedActive - $reportedActive) . "\n";
?>
```
## Related Issues
Original bug [#76003](https://bugs.php.net/bug.php?id=76003) (supposedly fixed in April 2022)
GitHub issue #14212: "FPM Status: active processes greater than pm.max_children"
### PHP Version
```plain
PHP 8.4.1 (fpm-fcgi) (built: Nov 21 2024 18:03:22) (NTS)
Copyright (c) The PHP Group
Built by https://github.com/docker-library/php
Zend Engine v4.4.1, Copyright (c) Zend Technologies
with Zend OPcache v8.4.1, Copyright (c), by Zend Technologies
```
### Operating System
Debian GNU/Linux 12 (bookworm)