Определяя местоположение утечки памяти в Apache httpd процесс, приложение PHP/Doctrine-based

У меня есть приложение PHP с помощью этих компонентов:

  • Apache 2.2.3-31 на Centos 5.4
  • PHP 5.2.10
  • Xdebug 2.0.5 с Удаленной включенной Отладкой
  • APC 3.0.19
  • Доктрина ORM для PHP 1.2.1 Кэширования Запроса использования и Результаты, Кэширующиеся через APC
  • MySQL 5.0.77 с помощью Кэширования Запроса

Я заметил, что, когда я запускаю Apache, я в конечном счете заканчиваю 10 дочерних процессов. Со временем каждый процесс вырастет в памяти, пока каждый не приблизится к 10% доступной памяти, которая начинает замедлять сервер к проверке с тех пор вместе, они растут для приведения в рабочее состояние 100% памяти.

Вот снимок моего главного вывода:

 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 

У меня нет продолжительных сценариев (они все завершают в конечном счете, самое длинное существо, возможно, 2 минуты длиной), и я работаю под предположением, что, после того как каждый сценарий завершается, память, которую он использует, освобождена. (Возможно, кто-то может исправить меня на этом).

Моя догадка - то, что это мог быть APC, так как это хранит данные между запросами, но в то же время кажется странным, что это хранило бы данные в процессе httpd.

Как я могу разыскать, какая часть моего приложения, вызывающего, является утечкой памяти?

Какие инструменты я могу использовать, чтобы видеть, как использование памяти растет в процессе httpd и что способствует ему?

9
задан Sam 1 June 2010 в 17:29
поделиться