Description
Description
Hello,
We want to use the FPM Status Page to monitor for PHP worker exhaustion. We use the process manager ondemand
, and we have noticed that we are lacking the data that shows how many children could potentially be created (the max_children
directive).
The FPM status looks like this:
{
"pool": "moodletes_89",
"process manager": "ondemand",
"start time": 1727966418,
"start since": 119,
"accepted conn": 18,
"listen queue": 0,
"max listen queue": 0,
"listen queue len": 0,
"idle processes": 1,
"active processes": 0,
"total processes": 1,
"max active processes": 5,
"max children reached": 0,
"slow requests": 0,
"processes": [
{
"pid": 2118218,
"state": "Idle",
"start time": 1727966430,
"start since": 107,
"requests": 9,
"request duration": 129,
"request method": "GET",
"request uri": "opcache.php",
"content length": 0,
"user": "-",
"script": "/usr/local/src/opcache.php",
"last request cpu": 0,
"last request memory": 2097152
}
]
}
Here we do have max active processes
, which shows the amount of processes that have been active at any point. This eventually grows to the max_children on a busy site, but after a restart it resets.
We also have idle_processes
, but since we use ondemand
as the process manager, we can not use this value for determing how much headroom there is, as more processes are spawned automatically (until max_children
is reached).
Would it be possible to expose the max_children
directive, so we can determine when all workers are busy and no more workers can be created?
As a sidenote, we originally tried to achieve this by monitoring the listen queue > 0
, however it seems this value does not work when FPM is configured with a unix-socket, and only works on TCP/IP sockets. Due to this we cannot use this method either.
Thank you!