¿Cuál es una buena manera de perfilar el uso de memoria de una página PHP? Por ejemplo, para ver cuánta memoria están usando mis datos y / o qué llamadas de función están asignando más memoria.
xdebug no parece proporcionar información de memoria en su función de creación de perfiles.
xdebug lo proporciona en su función de seguimiento. Esto está bastante cerca de lo que quiero, excepto que la gran cantidad de datos es abrumadora, ya que muestra deltas de memoria para cada llamada de función. Si fuera posible ocultar llamadas por debajo de cierta profundidad, tal vez con alguna herramienta GUI, eso resolvería mi problema.
¿Hay algo mas?
Respuestas:
Xdebug reimplementó el seguimiento de memoria en 2.6 (2018-01-29) que se puede usar en Qcachegrind o una herramienta similar. Solo asegúrate de seleccionar la opción de memoria :)
De los documentos:
No estoy familiarizado con el formato del archivo, pero Qcachegrind me ha funcionado muy bien para rastrear un par de problemas de memoria.
fuente
Como probablemente sepa, Xdebug eliminó el soporte de creación de perfiles de memoria desde la versión 2. *. Busque la cadena "funciones eliminadas" aquí: http://www.xdebug.org/updates.php
Así que probé otra herramienta y funcionó bien para mí.
https://github.com/arnaud-lb/php-memory-profiler
Esto es lo que hice en mi servidor Ubuntu para habilitarlo:
Y luego en mi código:
Finalmente abra el
callgrind.out
archivo con KCachegrindUsando Google gperftools (¡recomendado!)
Primero que nada, instale Google gperftools descargando el último paquete aquí: https://code.google.com/p/gperftools/
Entonces, como siempre:
Ahora en tu código:
Luego abre tu terminal y lanza:
pprof creará una nueva ventana en su sesión de navegador existente con algo como se muestra a continuación:
Xhprof + Xhgui (el mejor en mi opinión para perfilar tanto la CPU como la memoria)
Con Xhprof y Xhgui también puede perfilar el uso de la CPU o solo el uso de la memoria si ese es su problema en este momento. Es una solución muy completa, le brinda control total y los registros se pueden escribir tanto en mongo como en el sistema de archivos.
Para obtener más detalles, consulte mi respuesta aquí .
Fuego negro
Blackfire es un generador de perfiles PHP de SensioLabs, los chicos de Symfony2 https://blackfire.io/
Si usa puphpet para configurar su máquina virtual, le alegrará saber que es compatible ;-)
fuente
memprof_enable
en mi código PHP y obtengoPHP Fatal error: Uncaught Error: Call to undefined function memprof_enable()
. Hice gperftools para instalar desde el código fuente actual de ellos.php -i
en el cli o aphpinfo()
para ver si está cargando la extensión correctamente. Si no lo tiene allí, probablemente valga la pena echar un vistazo a sus*.ini
archivos.sudo pecl install memprof-1.0.0
.Bueno, esto puede no ser exactamente lo que está buscando, pero PHP tiene un par de funciones integradas que generarán el uso de la memoria. Si solo quisiera ver cuánta memoria está usando una llamada de función, puede usar memory_get_peak_usage () antes y después de una llamada, y tomar la diferencia.
Usas la misma técnica con tus datos usando el memory_get_usage () muy similar .
Enfoque bastante poco sofisticado, pero es una forma rápida de verificar un fragmento de código. Estoy de acuerdo en que xdebug mem deltas puede ser demasiado detallado para ser útil a veces, por lo que a menudo lo uso para reducir a una sección de código y luego deshacer el uso de memoria específico para piezas pequeñas manualmente.
fuente
http://geek.michaelgrace.org/2012/04/tracing-php-memory-usage-using-xdebug-and-mamp-on-mac/
Estoy en una Mac, así que si estás en Windows tendrás que probar esto, pero esto funciona para mí.
Modifiqué mi archivo tracefile-analyzer.php y agregué la ruta al binario de PHP en la parte superior para que pudiera llamarlo en la terminal como un script normal de Unix.
No olvide modificar este archivo a 755.
Puede crear fácilmente una secuencia de comandos de Ruby Watchr para llamar automáticamente a la secuencia de comandos cada vez que crea un archivo de perfil de memoria (* .xt). De esa manera, podría seguir probando y viendo sus mejoras sin tener que ejecutar el comando una y otra vez.
fuente