Open
Description
Description
Given the following FPM Pool configuration the Pool is configured using 1500 static workers and a listen.backlog of 100:
$ cat /etc/php/8.3/fpm/pool.d/backoffice.conf
[backoffice]
listen = /run/php8.3-fpm_backoffice.sock
listen.backlog = 100
pm = static
pm.max_children = 1500
pm.status_path = /php8.3-fpm-status-backoffice.php
; The number of requests each child process should execute before respawning. This can be useful to work around memory leaks
pm.max_requests = 2000
The listen.backlog works like expected on the socket.
$ ss -lxn src == /run/php8.3-fpm_backoffice.sock
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
u_str LISTEN 0 100 /run/php8.3-fpm_backoffice.sock 47129 * 0
Without high traffic total processes
reports 1500 as expected.
$ curl -s 127.0.0.1:80/php8.3-fpm-status-backoffice.php
pool: backoffice
process manager: static
start time: 13/May/2024:04:02:02 +0200
start since: 22533
accepted conn: 3057525
listen queue: 0
max listen queue: 0
listen queue len: 0
idle processes: 1460
active processes: 40
total processes: 1500
max active processes: 549
max children reached: 0
slow requests: 0
When generating high concurrent requests using a tool like siege or k6 I can observe the following output from the status page:
$ curl 127.0.0.1:80/php8.3-fpm-status-backoffice.php
pool: backoffice
process manager: static
start time: 08/May/2024:04:02:01 +0200
start since: 19565
accepted conn: 10120636
listen queue: 0
max listen queue: 0
listen queue len: 0
idle processes: 1
active processes: 3347
total processes: 3348
max active processes: 3503
max children reached: 0
slow requests: 0
active processes
/total processes
/max active processes
are way over the defined pm.max_children = 1500
.
How can active processes
be greater than pm.max_children
?
Also max children reached
reports 0.
Relates to: #9943 (comment)
PHP Version
PHP 8.3.6
Operating System
Debian 11