Saturday, May 21, 2005

memory leak in apache


I think that the server problem that I mentioned before is a memory leak in apache.  When I restart apache, each of the worker threads take up a certain amount of memory.  Then I make a request to a simple php script, and then the resident memory has increased after.


The simple script that I am using is:



<?php
phpinfo();
?>



Before running the script here is the memory used by apache:



root    21667  0.0  2.4 22556 11580 ?      S    18:13  0:06 /usr/sbin/httpd
apache    4002  0.0  2.4 22596 11636 ?      S    23:14  0:00 /usr/sbin/httpd
apache    4003  0.0  2.4 22580 11600 ?      S    23:14  0:00 /usr/sbin/httpd
apache    4004  0.0  2.4 22580 11600 ?      S    23:14  0:00 /usr/sbin/httpd
apache    4005  0.0  2.4 22580 11600 ?      S    23:14  0:00 /usr/sbin/httpd
apache    4006  0.0  2.4 22580 11600 ?      S    23:14  0:00 /usr/sbin/httpd
apache    4007  0.0  2.4 22580 11600 ?      S    23:14  0:00 /usr/sbin/httpd
apache    4008  0.0  2.4 22580 11600 ?      S    23:14  0:00 /usr/sbin/httpd
apache    4009  0.0  2.4 22580 11600 ?      S    23:14  0:00 /usr/sbin/httpd


Then after running the script:



root    21667  0.0  2.4 22556 11580 ?      S    18:13  0:06 /usr/sbin/httpd
apache    4002  0.0  2.4 22708 12004 ?      S    23:14  0:00 /usr/sbin/httpd
apache    4003  0.0  2.4 22580 11600 ?      S    23:14  0:00 /usr/sbin/httpd
apache    4004  0.0  2.4 22580 11600 ?      S    23:14  0:00 /usr/sbin/httpd
apache    4005  0.0  2.4 22580 11600 ?      S    23:14  0:00 /usr/sbin/httpd
apache    4006  0.0  2.4 22580 11600 ?      S    23:14  0:00 /usr/sbin/httpd
apache    4007  0.0  2.4 22580 11600 ?      S    23:14  0:00 /usr/sbin/httpd
apache    4008  0.0  2.4 22580 11600 ?      S    23:14  0:00 /usr/sbin/httpd
apache    4009  0.0  2.4 22580 11600 ?      S    23:14  0:00 /usr/sbin/httpd


It appears that the worker thread that handled the request is now using about 100KB more memory.  This is not a real big deal for a small file like this, but for this blog, the worker thread grows about 12MB.


I assume that once a thread is done with a request, all of the memory used for that request should be freed.


I have temporarily fixed this in two ways:


  1. Reduced the maximum number of requests that a single thread has to handle to 50

  2. I now call "/etc/init.d/httpd graceful"to restart apache once an hour


Next I want to look through all of the modules that are being included to see if I can disable some to free memory

No comments:

Post a Comment

Unlocking Raspberry Pi Potential: Navigating Network Booting Challenges for Enhanced Performance and Reliability

I've set up several Raspberry Pis around our house for various projects, but one recurring challenge is the potential for SD card failur...