Author |
|
bokehman
Joined: 12 Oct 2006 Posts: 11
|
Posted: Fri 27 Apr '07 10:19 Post subject: Memory leak... Apache 2.2 |
|
|
Hi all,
I have been running Apache 2 with no problems on a production box for about 2 years without any problem. I have recently upgraded to the to the compiled Apache 2.2 from this site (Windows XP).
The old set-up used to use about 12 Megabytes of RAM. Apache 2.2 starts using about 15 Megabytes of RAM but after running for a couple of days it has commandeered more than 100 Megabytes. Has anyone got any ideas what could be causing this? |
|
Back to top |
|
Kanashii
Joined: 17 Jul 2006 Posts: 155 Location: Porando
|
Posted: Fri 27 Apr '07 10:30 Post subject: |
|
|
The same on my Apache try run PHP as Fast-CGI or restart apache per hour |
|
Back to top |
|
bokehman
Joined: 12 Oct 2006 Posts: 11
|
Posted: Fri 27 Apr '07 10:39 Post subject: |
|
|
I'd rather find the problem than run it a a CGI. Also is it normal that 2 iterations of httpd.exe are running at the same time?
This makes me want to go back to my old set-up. |
|
Back to top |
|
James Blond Moderator
Joined: 19 Jan 2006 Posts: 7371 Location: Germany, Next to Hamburg
|
Posted: Fri 27 Apr '07 15:19 Post subject: |
|
|
Hello!
Apache always run 2 processes. 1 Parent and 1 Child. That is ok. Which version of Apache did you run before? Did you also tried the new Apache from apache.org?
I run Apache from this page on my server. And I don't have such problem.
OK the memory usage can be up to 150 Megs. But my Apache don't crashes. It runs fine since ~ 150 days. I run PHP as module. |
|
Back to top |
|
bokehman
Joined: 12 Oct 2006 Posts: 11
|
Posted: Fri 27 Apr '07 21:34 Post subject: |
|
|
James Blond wrote: | I run Apache from this page on my server. And I don't have such problem.
OK the memory usage can be up to 150 Megs. But my Apache don't crashes. It runs fine since ~ 150 days. I run PHP as module. | I was using Apache 2.0.54 (which didn't steal all this RAM).
What I don't understand is what is Apache 2.2 doing with all this RAM? Why is it commandeering it?
No I haven't tried the version from the apache website. |
|
Back to top |
|
tdonovan Moderator
Joined: 17 Dec 2005 Posts: 611 Location: Milford, MA, USA
|
Posted: Sat 28 Apr '07 17:05 Post subject: re: Apache use of RAM |
|
|
Apache, by default, is configured to aggressively use memory to gain performance. The default Windows configuration allows up to 250 threads to be created to serve simultaneous requests. Once a thread is created, it remains in memory and ready to serve requests until Apache shuts down.
Not an unreasonable default for modern machines. Figuring $110.USD per gb (based on the incremental cost of 1gb on a low-end Dell server), the presumption is that a web server will use about $11 worth of memory to be "ready for a burst of requests".
This is obviously not your opinion, in light of Apache stealing, commandeering, and otherwise maliciously absconding with your 100mb of memory
Most of the memory is used for stack space in the (up to 250) threads. The default thread stack size on Windows is 1mb, but Windows is very good about keeping the actual stack size down to only the memory which was ever actually "touched" - so even after 250 threads have been created you don't see a total of 250mb, but something smaller. The stack use is much smaller if you don't execute PHP or access a database from within the Apache process.
You can tune Apache down very easily. Changing the ThreadsPerChild value from 250 to a smaller number will make a big difference. Maybe something like 50.
If you really want to trade performance for memory conservation, you can set MaxRequestsPerChild to a non-zero number like 100. Apache will kill off the child process and start a new one (with no residual threads or stacks) every 100 requests with this setting. This is pretty drastic, but it's better than periodically restarting Apache.
It's not clear why you have such different results with Apache 2.0.54. Early versions of Apache had a smaller thread-count for Windows, but the default value was up to 250 by Apache 2.0.54. Maybe your Apache 2.0.54 httpd.conf was changed to use a smaller number of threads?
Another possibility is that you used something other than mod_php with Apache 2.0.54 to run your PHP and database access in separate processes. CGI or FastCGI maybe?
All things being equal, Apache 2.2.4 should be larger and faster than Apache 2.0.54, but more like 10%-20% larger - not ten times as large.
The version here at Apache Lounge is built with MSVC v8, so it is slightly larger (and faster) than the stock Apache from www.apache.org.
I find 140mb to be a typical memory size for Apache 2.2.4 on a 2gb Win2k machine with PHP 5.2.0 via mod_php and MySQL 5.0.38; after being subjected to a sustained heavy load. This is the virtual memory size, but when there is no competition for memory in the machine it is usually the actual memory size as well.
-tom- |
|
Back to top |
|
boterkoek
Joined: 03 May 2007 Posts: 3
|
Posted: Thu 03 May '07 12:53 Post subject: |
|
|
I have this same problem , but apache just keeps using more and more memory, up the 1.4 GIGS , and then it just crash.
I havent installed anything else then PHP , but in my opinion without php it has the same behaviour
My solution is a batch file that restarts apache 2.2.x (win32) every 6 hours.. but anyone know how to fix this? |
|
Back to top |
|
James Blond Moderator
Joined: 19 Jan 2006 Posts: 7371 Location: Germany, Next to Hamburg
|
Posted: Thu 03 May '07 14:18 Post subject: |
|
|
Please see the forum rules
without further information we can't help. |
|
Back to top |
|