Apache2/mod_fcgid/PHP Process Limits Not Respected
- by Daniel
I've recently moved to Apache2 / mod_fcgid / PHP from nginx / php_fpm. This is the second server on which I've made this migration, but it's used much less frequently than the first, which is working like a charm.
The problem is in the PHP processes that it's spawning. In looking at the mod_fcgid documentation, it appears that the default for killing idle processes is 300 seconds; I've changed that to 20. At this point, I'd be fine if 300 would work - but it's not happening. It's been running for nearly a day now, and server-status shows 12 active processes:
Process name: php5
Pid Active Idle Accesses State
19243 84879 14420 11 Ready
Process name: php5
Pid Active Idle Accesses State
20954 82143 149 22 Ready
20947 82149 149 22 Ready
20953 82143 149 13 Ready
Process name: php5
Pid Active Idle Accesses State
20589 82765 23644 72 Ready
Process name: php5
Pid Active Idle Accesses State
17663 86103 2034 117 Ready
Process name: php5
Pid Active Idle Accesses State
19862 83961 1976 91 Ready
Process name: php5
Pid Active Idle Accesses State
18495 85825 5164 18 Ready
Process name: php5
Pid Active Idle Accesses State
25463 75109 23948 24 Ready
Process name: php5
Pid Active Idle Accesses State
2466 60019 60016 2 Ready
Process name: php5
Pid Active Idle Accesses State
20729 82541 12592 23 Ready
Process name: php5
Pid Active Idle Accesses State
22135 80616 46361 6 Ready
PHP applications are not being served at this point - Apache is returning a 503. However, it is still serving the server-status module, and mod_mono/Mono 2.10 applications are still being served. The problem is with the PHP.
/etc/apache2/mods-available/fcgid.conf...
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
FcgidConnectTimeout 10
FcgidMaxRequestsPerProcess 500
FcgidIdleTimeout 20
FcgidFixPathinfo 1
FcgidMaxProcesses 10
</IfModule>
(heh - Max Processes isn't being respected either...) Of course, fcgid.conf is smylinked in mods-enabled.