eas wrote:
First, if you are running mod_php, then every worker carries memory overhead of having it loaded, whether the request is for a static file, or not.
Second, whether a request is for a static file or a dynamic page, the worker that processed the request is occupied until all the data is sent to the client.
These two issues are combined and aggravated when using keep-alives.
I think the simplest solution: Continue using apache
... but switch from mpm_prefork + mod_php to mpm_worker + mod_fastcgi (NOT fcgid!) and have for example a hundred worker threads and PHP_FCGI_CHILDREN=25. This way you have only one webserver to worry about.