tag strip_tags remove name get_the_tags first ejemplo all php memory profiling

php - remove - strip_tags()



Perfilado de memoria PHP (4)

¿Cuál es una buena forma de perfilar el uso de memoria de una página PHP? Por ejemplo, para ver cuánta memoria están usando mis datos, y qué llamadas de función están asignando la mayor cantidad de memoria.

  • xdebug no parece proporcionar información de memoria en su característica de creación de perfiles.

  • xdebug sí lo proporciona en su función de seguimiento. Esto es bastante parecido a lo que quiero, excepto que la gran cantidad de datos es abrumadora, ya que muestra los 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?


Bueno, esto puede no ser exactamente lo que estás buscando, pero PHP tiene un par de funciones integradas que generarán el uso de la memoria. Si solo desea ver cuánta memoria utiliza una llamada de función, puede usar memory_get_peak_usage() antes y después de una llamada, y tome la diferencia.

memory_get_usage() la misma técnica alrededor de tus datos usando memory_get_usage() muy similar.

Un enfoque bastante poco sofisticado, pero es una manera rápida de verificar un fragmento de código. Estoy de acuerdo en que los deltas de mem xdebug pueden ser demasiado detallados para ser útiles a veces, por lo que a menudo solo los utilizo para restringirme a una sección de código, luego elimino manualmente el uso específico de memoria para piezas pequeñas.


Como probablemente sepa, Xdebug eliminó el soporte de perfiles de memoria desde la versión 2. *. Busque la cadena de "funciones eliminadas" aquí: http://www.xdebug.org/updates.php

Funciones eliminadas

Se eliminó la compatibilidad con el perfil de memoria, ya que no funcionaba correctamente.

Así que probé con 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:

sudo apt-get install libjudy-dev libjudydebian1 sudo pecl install memprof echo "extension=memprof.so" > /etc/php5/mods-available/memprof.ini sudo php5enmod memprof service apache2 restart

Y luego en mi código:

<?php memprof_enable(); // do your stuff memprof_dump_callgrind(fopen("/tmp/callgrind.out", "w"));

Finalmente abra el archivo callgrind.out con KCachegrind

Usando Google gperftools (¡recomendado!)

Antes que nada, instale los gperftools de Google descargándolos aquí: https://code.google.com/p/gperftools/

Entonces como siempre:

sudo apt-get update sudo apt-get install libunwind-dev -y ./configure make make install

Ahora en tu código:

memprof_enable(); // do your magic memprof_dump_pprof(fopen("/tmp/profile.heap", "w"));

Luego abre tu terminal e inicia:

pprof --web /tmp/profile.heap

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 hacer un perfil del uso de la CPU o simplemente del uso de la memoria, si ese es su problema en este momento. Es una solución muy completa, te da un control total y los registros se pueden escribir tanto en mongo como en el sistema de archivos.

Para más detalles, ver mi respuesta aquí .

Fuego negro

Blackfire es un perfilador 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 ;-)


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 el terminal como un script de Unix normal.

#!/Applications/MAMP/bin/php5.3/bin/php <?php if ( $argc <= 1 || $argc > 4 ) {

No te olvides de modificar este archivo a 755.

Puede crear fácilmente un script de Ruby Watchr para llamar automáticamente al script cada vez que crea un archivo de perfil de memoria (* .xt). De esta forma, podría seguir probando y viendo sus mejoras sin tener que ejecutar el comando una y otra vez.


Xdebug reimplementó el seguimiento de memoria en 2.6 (2018-01-29) que se puede usar en Qcachegrind o herramienta similar. Solo asegúrate de seleccionar la opción de memoria :)

De los documentos:

Desde Xdebug 2.6, el generador de perfiles también recopila información sobre la cantidad de memoria que se está utilizando y las funciones que utilizan los métodos aGnd para aumentar el uso de la memoria.

No estoy familiarizado con el formato del archivo, pero es Qcachegrind que me ha funcionado muy bien al rastrear un par de problemas de memoria.