title: Locating memory leak in Apache httpd process, PHP/Doctrine-based application
body: <p>I have a PHP application using these components:</p>
  
  <ul>
  <li>Apache 2.2.3-31 on Centos 5.4</li>
  <li>PHP 5.2.10</li>
  <li>Xdebug 2.0.5 with Remote Debugging enabled</li>
  <li>APC 3.0.19</li>
  <li>Doctrine ORM for PHP 1.2.1 using Query Caching and Results Caching via APC</li>
  <li>MySQL 5.0.77 using Query Caching</li>
  </ul>
  
  <p>I've noticed that when I start up Apache, I eventually end up 10 child processes.  As time goes on, each process will grow in memory until each one approaches 10% of available memory, which begins to slow the server to a crawl since together they grow to take up 100% of memory.</p>
  
  <p>Here is a snapshot of my top output:</p>
  
  <pre><code> PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
   1471 apache    16   0  626m 201m  18m S  0.0 10.2   1:11.02 httpd                                                                                                                                                          
   1470 apache    16   0  622m 198m  18m S  0.0 10.1   1:14.49 httpd                                                                                                                                                          
   1469 apache    16   0  619m 197m  18m S  0.0 10.0   1:11.98 httpd                                                                                                                                                          
   1462 apache    18   0  622m 197m  18m S  0.0 10.0   1:11.27 httpd                                                                                                                                                          
   1460 apache    15   0  622m 195m  18m S  0.0 10.0   1:12.73 httpd                                                                                                                                                          
   1459 apache    16   0  618m 191m  18m S  0.0  9.7   1:13.00 httpd                                                                                                                                                          
   1461 apache    18   0  616m 190m  18m S  0.0  9.7   1:14.09 httpd                                                                                                                                                          
   1468 apache    18   0  613m 190m  18m S  0.0  9.7   1:12.67 httpd                                                                                                                                                          
   7919 apache    18   0  116m  75m  15m S  0.0  3.8   0:19.86 httpd                                                                                                                                                          
   9486 apache    16   0 97.7m  56m  14m S  0.0  2.9   0:13.51 httpd 
  </code></pre>
  
  <p>I have no long-running scripts (they all terminate eventually, the longest being maybe 2 minutes long), and I am working under the assumption that once each script terminates, the memory it uses gets deallocated.  (Maybe someone can correct me on that).</p>
  
  <p>My hunch is that it could be APC, since it stores data between requests, but at the same time, it seems weird that it would store data inside the httpd process.</p>
  
  <p>How can I track down which part of my app is causing the memory leak?  </p>
  
  <p>What tools can I use to see how the memory usage is growing inside the httpd process and what is contributing to it?</p>