Login Barrapunto
¿Cómo evaluar el rendimiento y optimizar con PHP?
pobrecito hablador nos cuenta: «Llevo unas semanas pensando en migrar un montón de aplicaciones en PHP que consumen muchos recursos de un hosting compartido a un servidor dedicado. El problema es que no puedo sacar un rendimiento de la instalación. Después de intentar todas las guías, aceleradores, presentaciones y consejos sobre optimización de instalaciones en PHP, obtengo un rendimiento muy muy pobre. Parto de una instalación sobre Ubuntu, Fedora Core 6 y CentOS, y siempre obtengo lo mismo. El servidor de MySQL sí que puedo optimizarlo con facilidad pero el PHP nada. ¿Qué pasos seguís vosotros para obtener una buena instalación de PHP? ¿Qué fuentes de documentación habéis seguido para aprender a optimizarlo?
¿Qué consejos me podéis dar? ¿Usáis algún software para evaluar el rendimiento?»
¿Cómo evaluar el rendimiento y optimizar con PHP?
|
Log in/Crear cuenta
| Top
| 34 comentarios
| Buscar hilo
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.

De hecho ya no veo literatura sobre como optimizar
(Puntos:2)( http://www.ytodolodemas.com/ )
No hay soluciones milagrosas
(Puntos:1, Interesante)El tema es bastante amplio: desde cómo optimizar un sistema para ejecutar php, hasta como optimizar las propias aplicaciones php.
Por ello, lo primero seria identificar tu cuello de botella: el sistema o la aplicación ( o ambas cosas).
De poco serviria optimizar un servidor con 256 Mb de RAM y procesador mononucleo, si luego quieres que tenga cientos de transacciones por segundo.
Todo el hardware, el software de sistemas y el software de aplicacion debe estar "equilibrado" y proporcionado.
Por eso no existe ningun botón mágico en el PHP que acelere su rendimiento.
Apuntes conferencia de Rasmus Lerdford
(Puntos:3, Informativo)( Última bitácora: Jueves, 11 Marzo de 2004, 15:46h )
A más de alguno lo hundió en la mie***, por según él, no hacer esas tareas tan "cotidianas" de optimización.
Te dejo las trasparencias que colgó: http://talks.php.net/show/cp08/ [php.net]
Échale la culpa al boogie
(Puntos:2, Interesante)FireFox Plug-In YSlow
(Puntos:2, Informativo)consejos y bibliografia
(Puntos:3, Informativo)Otra parte de la optimización la conseguirás afinando parámetros e instalando una caché de opcode (código intermedio de php): APC [php.net], eAccelerator [eaccelerator.net], Xcache [lighttpd.net] son las más populares y están disponibles para cualquier distribución. Quizás en sus páginas encuentres alguna utilidad para medir el rendimiento. Sino la encuentras, lo puedes hacer como lo hacíamos en tiemos remotos cuando no había IDEs: a inicio de algoritmo que una variable guarde el tiempo actual, y a final de algoritmo otra variable capture el tiempo. Entonces lo restas e imprimes.
Hay unas cuantas utilidades que sirven para medir el rendimiento global de respuesta en caso que tu entorno sea servidor web + php + servidor de bases de datos: ab, curl,
Existe como mínimo un optimizador de opcode: Zen optimizer [zend.com], pero creo que es de pago.
En cuanto a bibliografia a mi me gusta afinando Lamp [xtec.net] que no es un texto sino una presentación. En su última página encontrarás algo de bibliografía adicional.
optimización
(Puntos:4, Informativo)xdebug
(Puntos:1, Interesante)Lo primero es usar un profiler para ver que partes del código tardan más en ejecutarse. Afortunadamente, Xdebug [xdebug.org] hace exactamente eso.
Hay que instalarlo siguiendo las instrucciones y luego añadir en el .htaccess de tu sitio las líneas:
php_value xdebug.profiler_output_dirphp_value xdebug.profiler_output_name cachegrind.out.2
php_value xdebug.profiler_enable 1
o similar. Luego, puedes abrir el archivo resultante en kcachegrind (kde) [sourceforge.net] o wincachegrind (windows) [sourceforge.net] para ver cuales son las llamadas que llevan más tiempo.
En todo caso, es bueno usar una cache de objetos para php como php-accelerator [php-accelerator.co.uk], que suele conseguir un orden de magnitud de ventaja sobre php no cacheado.
Concretando más el asunto
(Puntos:1, Informativo)En la pregunta original a barrapunto, comentaba que el problema me lo encontré cuando quise pasar de un alojamiento compartido (Arsys y similares) que más o menos funcionaba bien, a un máquina dedicada en Amazon EC2, cuyo rendimiento en PHP era escandalosamente lento.
En concreto yo usé phpspeed para medir el rendimiento. No sé si es un buen benchmark, pero el caso es que concuerda bastante bien con mis tiempos de ejecución en distintos servidores de mis scripts reales más complejos que tiran de PHP y MYSQL.
Las cifras que me resultaron para un hosting compartido barato, en piensasolutions (marca "blanca" de arsys) son:
http://developer.amazonwebservices.com/connect/se
mientras que en una máquina básica en Amazon EC2 con Fedora Core 6 obtuve esto:
http://developer.amazonwebservices.com/connect/se
Aplicando optimizadores, aceleradores, tweaks de configuración, etc, etc, conseguí fácilmente multiplicar por 10 el rendimiento de MYSQL, pero sólo duplicar el de PHP, que está muy lejos del hosting compartido.
Gracias de nuevo por vuestros posts.
Zend Platform
(Puntos:2)( http://barrapunto.com/ )
NabLa
No te dije que sería fácil. Te dije que sería la verdad.En mi experiencia
(Puntos:2, Informativo)BBDD y CGI
(Puntos:1)( Última bitácora: Miércoles, 02 Julio de 2008, 12:51h )
Por otro lado, si tanto te preocupa optimizar tendras que revisar tu codigo poniendole cronometros de tiempo en las entradas y salidas de cada zona y por ultimo mucho se habla de ASP y PHP, pero si REALMENTE QUIERES POTENCIA DE PROCESO te agarras el gcc y te haces un FAST-CGI... mas rapido que eso NO HAY NADA (bueno... ensamblador jejeje). Por supuesto lleva trabajo: y ojo, porque con C el gasto de memoria se te puede disparar, aunque tambien es el que -bien programado- consume menos. Tienes infinidad de librerias, etc.
Por ultimo, se me olvidaba... mira que tu hosting tenga una conexion de calidad y no quede en el culo del mundo. Muchas veces el lag es alto y tambien influye... todo influye en realidad.
Re:Turck MMCache for PHP
(Puntos:2)( http://barrapunto.com/ )
#If this were implemented, you would be signed out now#
Re:Pasate a Asp.net
(Puntos:2)De todas formas, también existen herramientas similares para PHP, sólo que no suelen ir empaquetadas en un único mega-producto como es Visual Studio. No obstante, algunos entornos como NetBeans y Aptana (eclipse + plugins) también da una funcionalidad similar a la que comentas.
En cualquier caso, la mayor parte de los problemas de rendimiento son o por la base de datos o por problemas de base que son muy costosos de cambiar.
En fin, suerte con ello...
La verdad está ahí fuera, ¡pero como corre la jodia!
Re:Una duda
(Puntos:1)( http://www.openmobiledictionary.com/ | Última bitácora: Domingo, 03 Febrero de 2008, 14:58h )