Publicación cruzada de mi referencia de SO Documentation beta que se desconecta.
Perfilado con XDebug
Una extensión para PHP llamada Xdebug está disponible para ayudar a perfilar aplicaciones PHP , así como a la depuración en tiempo de ejecución. Al ejecutar el generador de perfiles, la salida se escribe en un archivo en formato binario llamado "cachegrind". Las aplicaciones están disponibles en cada plataforma para analizar estos archivos. No se necesitan cambios en el código de la aplicación para realizar este perfil.
Para habilitar la creación de perfiles, instale la extensión y ajuste la configuración de php.ini. Algunas distribuciones de Linux vienen con paquetes estándar (por ejemplo, el php-xdebug
paquete de Ubuntu ). En nuestro ejemplo, ejecutaremos el perfil opcionalmente en función de un parámetro de solicitud. Esto nos permite mantener la configuración estática y activar el generador de perfiles solo cuando sea necesario.
# php.ini settings
# Set to 1 to turn it on for every request
xdebug.profiler_enable = 0
# Let's use a GET/POST parameter to turn on the profiler
xdebug.profiler_enable_trigger = 1
# The GET/POST value we will pass; empty for any value
xdebug.profiler_enable_trigger_value = ""
# Output cachegrind files to /tmp so our system cleans them up later
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_output_name = "cachegrind.out.%p"
A continuación, use un cliente web para realizar una solicitud a la URL de su aplicación que desea perfilar, p. Ej.
http://example.com/article/1?XDEBUG_PROFILE=1
A medida que la página se procesa, escribirá en un archivo con un nombre similar a
/tmp/cachegrind.out.12345
Por defecto, el número en el nombre del archivo es la identificación del proceso que lo escribió. Esto es configurable con la xdebug.profiler_output_name
configuración.
Tenga en cuenta que escribirá un archivo para cada solicitud / proceso PHP que se ejecute. Entonces, por ejemplo, si desea analizar una publicación de formulario, se escribirá un perfil para la solicitud GET para mostrar el formulario HTML. El parámetro XDEBUG_PROFILE deberá pasarse a la solicitud POST posterior para analizar la segunda solicitud que procesa el formulario. Por lo tanto, al crear perfiles, a veces es más fácil ejecutar curl para PUBLICAR un formulario directamente.
Analizando la salida
Una vez escrito, el caché del perfil puede ser leído por una aplicación como KCachegrind o Webgrind . PHPStorm, un popular IDE de PHP, también puede mostrar estos datos de perfil .
KCachegrind, por ejemplo, mostrará información que incluye:
- Funciones ejecutadas
- Tiempo de llamada, tanto en sí mismo como inclusivo de llamadas de función posteriores
- Número de veces que se llama a cada función
- Gráficos de llamadas
- Enlaces al código fuente
Qué buscar
Obviamente, el ajuste del rendimiento es muy específico para los casos de uso de cada aplicación. En general es bueno buscar:
- Llamadas repetidas a la misma función que no esperaría ver. Para las funciones que procesan y consultan datos, estas podrían ser oportunidades principales para que su aplicación se almacene en caché.
- Funciones de funcionamiento lento. ¿Dónde pasa la aplicación la mayor parte de su tiempo? La mejor recompensa en el ajuste del rendimiento se centra en aquellas partes de la aplicación que consumen la mayor parte del tiempo.
Nota : Xdebug, y en particular sus características de creación de perfiles, requieren muchos recursos y ralentizan la ejecución de PHP. Se recomienda no ejecutarlos en un entorno de servidor de producción.