httpd-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jonathan Cutting <>
Subject Re: [users@httpd] MaxRequestsPerChild and MaxKeepAliveRequests clarification
Date Sun, 26 Jul 2009 15:50:22 GMT

many thanks for your response. I'm running xcache on the server and it 
uses about 1.5G of the 4G memory caching all the php scripts, so Apache 
isn't using quite as much memory as it might seem at first. There are 
not many images but each request can include up to 100 php scripts.

On 26/07/09 14:49, Nick Kew wrote:
> Jonathan Cutting wrote:
>> Hi all,
>> I'm running Apache 2.2.9 on a machine with 4G of RAM, and the server 
>> experiences about 100,000 hits a day, ~1G bandwidth and about 30,000 
>> page requests.
> That's about 100 times more memory than you should need for the load :)
>> It's running several instances of a large PHP web app so there are 
>> comparatively few users who between them request many pages each.
>> I'm trying to work out the optimal settings for the server - I used 
>> to have MaxRequestsPerChild set to 2000 and MaxKeepAliveRequests at 
>> 300 - but the server started swapping towards the end of each day.
> You have a problem.  That's an extremely low MaxRequestsPerChild.
> Sounds like you may have a BIG memory leak!
>> I read somewhere that when the MaxKeepAliveRequests directive is set, 
>> each server will actually serve MaxKeepAliveRequests multiplied by 
>> MaxRequestsPerChild before it dies - which in my case was 600,000 
>> requests. Is this indeed correct?
> No.  MaxRequestsPerChild should actually read MaxConnectionsPerChild.
> But the keepalives is something you'll hit much more rarely, unless
> one of your PHP pages generates several thousand hits to images,
> stylesheets, etc.  A mere 300 could only generate that many keepalive
> requests if a browser confined itself to a single connection - which
> AFAIK no mainsteam browser has done since Netscape 0.9 implemented
> parallel connections in (IIRC) 1994.

Ah ok, so a browser will make a few connections to the server and even 
if the page includes say 40 images and 10 js scripts, the keepalive 
total per child will be pretty low, possibly ~10 requests. I've used 
mod_expires to set pretty aggressive browser caching so in most cases 
there should only be some html served.

>>   I'm keen to make the best use of the memory but at present have set 
>> MRPC down to 300 and memory use has stabilised. Any advice on the 
>> optimal balance between the two settings would be very much appreciated,
> Find out what's leaking memory.
> You might also benefit from swapping to a threaded MPM (e.g. worker)
> and run your PHP under fastcgi with mod_fcgid.  That way you could
> also raise your MaxClients, which looks very, very low, and
> drop all use of MaxRequestsPerChild.

Even at very busy times, the server is only running about 35 children - 
there are about 400 users who access the server sporadically throughout 
the day (some more intensively than others). Looks like I need to spend 
some time figuring out how each child's memory usage grows and why, and 
testing a server using fastcgi.

Thanks again,


The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:> for more info.
To unsubscribe, e-mail:
   "   from the digest:
For additional commands, e-mail:

View raw message