2009-07-02 27 views
14

He utilizado la herramienta Valgrinds Massif para controlar el uso de memoria en el pasado.¿Cómo puedo controlar el uso de memoria de php en Linux?

¿Alguien sabe cómo capturar el uso de la memoria de los procesos de php generados en un servidor linux lighttpd?

he encontrado que Valgrind no se puede asociar a un proceso prerunning (y yo no sabría el PID del proceso php antes de la mano de todos modos)

sólo ver el uso de memoria de lighttpd, no los procesos PHP que se generan por lighttpd módulo cgi.

Gracias de antemano.

Respuesta

13

PHP tiene sus propias funciones de prueba de memoria, no sé si eso es ninguna utilidad para usted, pero si sólo desea registrar se puede usar: http://php.net/manual/en/function.memory-get-peak-usage.php

echo "Using ", memory_get_peak_usage(1), " bytes of ram."; 
+1

¿Es este el uso de memoria para solo el script, o incluye el uso de la memoria de proceso php también? También será difícil obtener el máximo uso en cualquier momento en el tiempo si se están ejecutando varios scripts. – DEzra

+3

agregando el valor booleano true como el primer parámetro en memory_get_peak_usage (verdadero) también devolverá la memoria para el proceso de PHP. – scotts

1

http://php.net/manual/en/function.memory-get-usage.php

debe darle la cantidad de memoria que el hilo se está utilizando desde dentro de la propia secuencia de comandos. Creo que debido a que el script (y el hilo) solo existe durante unos pocos milisegundos como máximo, solo el tiempo que lleva generar la página, capturarlo fuera de PHP puede ser difícil.

  • Plan B

También puede obtener información del servidor que puede ser más preciso depurar - Yo uso Xdebug personalmente, y cuando se genera un error/noto que le da un seguimiento de la pila, la hora y uso de memoria. Puede activarlo al final de la secuencia de comandos con:

trigger_error ('Finished', E_USER_NOTICE); 

Y le dará la información. No estoy seguro de captar los datos; si es necesario, puede haber una función en los documentos sobre cómo, recuerdo vagamente haber visto alguno.

+0

hola, sí, intenté memory_get_usage y memory_get_peak_usage en un script que creaba una cadena y formaba un bucle 50 veces, aumentando la cadena cada vez.Parece que memory_get_usage() siempre devuelve 2mb (en bytes). Lo cual me parece incorrecto (a menos que php preasigne 2mb para todos los scripts? – DEzra

+1

He actualizado un poco mi respuesta - xdebug se puede obtener/ver en http://www.xdebug.org/ – Meep3D

6

¿No puedes usar la herramienta 'ps'?

$ ps -F -C php-cgi 

UID  PID PPID C SZ RSS PSR STIME TTY   TIME CMD 
http  10794 10786 0 4073 228 0 Jun09 ?  00:00:00 /usr/bin/php-cgi 
http  10795 10794 0 4073 28 0 Jun09 ?  00:00:00 /usr/bin/php-cgi 
http  10796 10786 0 4073 228 0 Jun09 ?  00:00:00 /usr/bin/php-cgi 
http  10797 10796 0 4613 3544 0 Jun09 ?  00:00:00 /usr/bin/php-cgi 
... 

RSS es el tamaño real -memoria (conjunto residente) en kilobytes del proceso.

Para resumir todo esto en bash (un poco oxidado siento)

#!/bin/bash 

total=0 
for i in `ps -C php-cgi -o rss=` 
do 
    total=$(($total + $i)) 
done 
echo "Memory usage: $total kb" 

# Output: Memory usage: 4540 kb 

Un forro:

total=0; for i in `ps -C php-cgi -o rss=`; do total=$(($total+$i)); done; echo "Memory usage: $total kb"; 

sé la fiabilidad de la parte de memoria en ps se pone en duda, pero al menos te da una idea de cómo es el uso.

+0

Esto es bueno si está usando php-cgi, si está usando mod_php no está de suerte y probablemente quiera ir con la primera respuesta. –

4

Además de los comandos integrados que se muestran arriba, puede usar XHProf para crear perfiles de sus scripts y XHGui para mostrar resultados de creación de perfiles en una buena aplicación de navegador. Obtendrá información detallada sobre cómo sus métodos utilizan la memoria y cuáles son los picos de uso de memoria dentro de su aplicación.

+2

También puede encontrar XHProf en github en https://github.com/facebook/xhprof/ –

+0

Gracias, siempre me gusta escuchar sobre las nuevas herramientas para la creación de perfiles. Definitivamente veré XHProf y XHGUI – DEzra

Cuestiones relacionadas