Doctrina-basado Tengo una aplicación PHP usando estos componentes:Localización de pérdida de memoria en proceso httpd Apache, PHP/aplicación
- Apache 2.2.3-31 en Centos 5.4
- PHP 5.2.10
- Xdebug 2.0.5 con depuración remota activar
- APC 3.0.19
- Doctrina ORM para PHP 1.2.1 usando consulta el almacenamiento en caché y caché de resultados a través de APC
- MySQL 5.0.7 7 usando Query Caching
Me di cuenta de que cuando inicio Apache, finalmente termino con 10 procesos hijos. Conforme pasa el tiempo, cada proceso crecerá en la memoria hasta que cada uno se acerque al 10% de la memoria disponible, lo que comienza a ralentizar el servidor, ya que juntos crecen hasta ocupar el 100% de la memoria.
Aquí es una instantánea de mi salida superior:
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
no tengo guiones de larga duración (todos ellos terminan con el tiempo, siendo el más largo quizás 2 minutos de duración), y estoy trabajando bajo el supuesto de que una vez que termina cada script, la memoria que utiliza se desasigna. (Tal vez alguien me puede corregir eso).
Mi corazonada es que podría ser APC, ya que almacena los datos entre las solicitudes, pero al mismo tiempo, parece extraño que pueda almacenar datos dentro del proceso httpd.
¿Cómo puedo rastrear qué parte de mi aplicación está causando la pérdida de memoria?
¿Qué herramientas puedo usar para ver cómo crece el uso de la memoria dentro del proceso httpd y qué está contribuyendo a ello?