2009-06-09 9 views
6

Tengo un sitio web de PHP en un servidor Apache, y me gustaría saber si hay herramientas y otras formas en que puedo crear perfiles para encontrar cuellos de botella en el código. Lo que necesito saber es qué funciones tardan en procesarse, etc.PHP Profiler para un sistema en vivo en la parte superior de Apache

Algo así como gprof, excepto PHP en el servidor de Apache en vivo.

¿Cuáles son otras formas de encontrar cuellos de botella en un sistema PHP?

+0

No estoy seguro de que sea una buena idea ejecutar un perfil caro en un sitio web en vivo. la creación de perfiles ralentiza significativamente tu aplicación. mejor crear una copia local y hacer el perfil allí (esto también elimina el riesgo de tiempo de inactividad debido a problemas de instalación del perfilador). – stefs

Respuesta

0

Puede usar phpdebug para este trabajo. Es una extensión de php.

4

Pruebe XDebug (http://www.xdebug.org/) puede desencadenarlo con un parámetro get durante su sesión de depuración. Esto creará Cachegrind-archivos que se puede comprobar en kcachegrind o WinCacheGrind (esto primero es mucho mejor) ...

8

Usted puede utilizar xdebug - una vez instalado, puede desencadenar profiling of requests en una variedad de maneras, y que terminan con un perfil de formato valgrind para cada solicitud. Cargue esto en WinCacheGrind, KCacheGrind o similar y desglosese para encontrar dónde se usa todo el tiempo.

alt text

+1

voto de +1 - Xdebug es la mejor opción de FOSS, pero si comienzas a agregar servidores, Zend Platform tendrá herramientas adicionales para optimizar el rendimiento. – Pro777

+0

Zend Platform es excelente si administra varios servidores, pero es un poco viejo y difícil de instalar/configurar. El sucesor, Zend Server, no es completo, pero ya es bastante bueno y mucho más fácil de instalar (paquetes RPM o DEB). Además, Community Edition es gratis. –

+2

xdebug y kcachegrind funcionó perfectamente y aisló los cuellos de botella que tuve que encontrar casi instantáneamente una vez que tuve cargado el archivo de rastreo. – pdwalker

1

si tiene un área muy específica a la vista, es posible que desee trate de rociar estos en todo su código:

$f_timeStart=microtime(true); 
$f_timeLast=$f_timeStart; 


error_log(sprintf("%'08.5f",(microtime(true)-$f_timeLast)).' - '.sprintf("%'05.2f",(microtime(true)-$f_timeStart)).' secs - '.'01 before xyz()'."\n", 3, '/var/tmp/my-errors.log'); 
$f_timeLast=microtime(true); 
xyz(); 
error_log(sprintf("%'08.5f",(microtime(true)-$f_timeLast)).' - '.sprintf("%'05.2f",(microtime(true)-$f_timeStart)).' secs - '.'01 after xyz()'."\n", 3, '/var/tmp/my-errors.log'); 
$f_timeLast=microtime(true); 
0

Yo sugeriría contra la construcción de su propio generador de perfiles. Hay varios perfiladores excelentes de libre acceso que le darán detalles y facilidad de uso. Creo que su mejor inversión de tiempo está en la siguiente combinación. Utilizamos esta en la empresa developent web para la que trabajo, y estamos muy contentos con él:

  1. La pila Zend Server php:
    Usted puede utilizar la libre Community Edition, y elegir qué partes de la pila que desee instalar. Instalamos solo la parte de PHP, y confiamos en Apache y MySQL desde la distribución de Linux. Zend Server proporciona una extensión de depurador, un optimizador de código (para un ligero incremento de velocidad), un caché de bytecode (para un impulso de velocidad considerable) y una buena GUI para administrar la configuración de PHP. La versión comercial proporciona mucho más. La instalación en Linux es fácil a través de paquetes RPM o DEB.

  2. utilizar la extensión de depurador necesita un IDE:
    Instalar Zend Studio que es un excelente PHP IDE (consulte la página de características), y hace que la depuración y perfilado muy fácil. No es necesario crear archivos cachegrind u otros procesos de múltiples pasos, simplemente haga clic en Perfil en la barra de herramientas en Firefox y Studio comenzará a perfilar esa página. El detalle y la facilidad de uso son enormes.

Tal vez estoy sonando como un vendedor de Zend, y tal vez esto suena como más de lo necesario, pero yo sólo soy un desarrollador de PHP que es muy feliz con las herramientas que utiliza. Creo que es un tiempo bien empleado para comenzar a usar Studio, pero la combinación lo hace genial y Server incluso acelerará un poco su servidor en vivo. En mi opinión, este combo es simplemente el mejor entorno de desarrollo PHP actualmente disponible. Consulte el demo videos. También hay uno en perfilar.

0

Si está ejecutando OpenSolaris, considere dtrace. La mayor ventaja es que también puedes explorar otras capas como Apache, Mysql. dtrace tiene una sobrecarga baja y puede habilitar de forma selectiva solo las sondas que desee supervisar.

1

dtrace tiene una baja sobrecarga

dtrace, de hecho, no tiene casi ninguna perdida a menos que habilite miles de sondas creo que también está disponible en el BSD

3

XHProf fue diseñado para este caso de uso .

XHProf (abierto por Facebook en 2009) potencia el XHProfLive de Facebook - un sistema de monitoreo de rendimiento en tiempo real que proporciona información sobre el nivel de función de los niveles de producción.

un fragmento de XHProf doc:

XHProf es un peso ligero perfilador basado instrumentación. Durante la fase de recopilación de datos, mantiene conteos de seguimiento de llamadas e inclusivo métricas para arcos en el callgraph dinámico de un programa. Calcula métricas exclusivas en la fase de informe/posprocesamiento . XHProf maneja funciones recursivas por ciclos de detectar en la callgraph en tiempo de recogida de datos en sí y evitando los ciclos dando nombres calificados únicas profundidad para el invocaciones recursivas. la naturaleza de peso ligero

de XHProf y capacidades de agregación hacen que sea bien adecuado para la recogida de estadísticas de rendimiento "función de nivel" de producción entornos.

cordiales, Kannan Muthukkaruppan

+0

¿Hay alguna guía/código para ayudar a implementar la parte activa? p.ej. muestreo de solicitudes y almacenamiento, gráficos, etc. –

1

Permítanme mencionar también Pinba
En mi opinión, es más adecuado para la configuración de múltiples servidores en lugar de para un solo servidor, pero en caso de que su proyecto crezca ..

Cuestiones relacionadas