Nick,

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,

Jonathan








---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscr...@httpd.apache.org
  "   from the digest: users-digest-unsubscr...@httpd.apache.org
For additional commands, e-mail: users-h...@httpd.apache.org

Reply via email to