Reducir el consumo de RAM de WordPress con eAccelerator

Pablo

Hace aproximadamente 15 días, en un fin de semana que tenia un poco de tiempo libre me decidí a jugar un poco con el VPS donde se aloja Kabytes, principalmente probando distintas configuraciones para optimizarlo ya que últimamente WordPress estaba consumiendo todos los recursos.

La cuestión es que por mas pruebas que hice cambiando la configuración de MySQL y de Apache los resultados eran muy similares a los obtenidos en pruebas pasadas, hasta que recordé que hacia un tiempo, y para otro proyecto, había instalado una cache de scripts PHP, para ser mas  preciso eAccelerator.

wordpress eaccelerator

¿Como funciona eAccelerator?

Todo programador sabe (o debería saber) la diferencia entre un lenguaje compilado y uno interpretado. PHP es un justamente un lenguaje interpretado, eso significa que por cada ejecución esta se interpreta, creando una estructura de datos que posteriormente se ejecuta.

Este proceso como se imaginaran es bastante costoso y lento a comparación del realizado por un lenguaje compilado. Quizás este sea unos de los puntos débiles de PHP.

Finalmente tenemos este problema, y es justamente donde entra eAccelerator. Este maravilloso proyecto lo que hace es crear una cache de todos nuestros scripts en PHP, evitando que cada uno de estos tenga que interpretarse por cada ejecución, ahorrando recursos y ganando mucha velocidad.

Lo que esta muy bien de este acelerador es que no requiere acción alguna de nosotros luego de la instalación.

Muchos se estarán preguntando ¿que pasa si un archivo PHP es modificado? la respuesta es simple, nada, eAccelerator detecta la fecha de modificado de un archivo y sobreescribe la cache por la mas reciente. Mas simple imposible.

¿El resultado de instalar eAccelerator con WordPress?

Impresionante, WordPress instalado sin casi utilizar plugin estaba consumiendo 14mb de ram aproximadamente (con picos de casi 20mb), luego de instalar eAccelarator solo 4.48mb.

Consumo ram WordPress

Instalación de eAccelerator

La instalación fue bastante simple y no necesito mas que algunos comandos desde consola, aunque recomiendo que sigan alguna guía exactamente para la versión de sistema operativo instalado en su servidor, les dejo la que hice yo y funciono la perfección, con la configuración sugerida por PHP.ph en CentOS 5.

yum install php-devel
yum groupinstall 'Development Tools'

Cambiamos de directorio, bajamos los archivos e instalamos

cd /tmp
wget http://bart.eaccelerator.net/source/0.9.5.2/eaccelerator-0.9.5.2.tar.bz2
tar xvfj eaccelerator-0.9.5.2.tar.bz2
cd eaccelerator-0.9.5.2
Phpize.
phpize
./configure
Install it.
make
make install

Creamos un archivo de configuración

vi /etc/php.d/eaccelerator.ini [Enter]

extension="eaccelerator.so"
eaccelerator.shm_size="0"
eaccelerator.cache_dir="/var/cache/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

Creamos un directorio donde se va a guardar la cache de scripts y le damos permisos. Finalmente reiniciamos el Apache.

mkdir -p /var/cache/eaccelerator
chmod 0777 /var/cache/eaccelerator
/etc/init.d/httpd restart

Si todo salió bien vamos a tener instalada y funcionando correctamente la extensión de eAccelerator en nuestro servidor.  Para probarlo podemos crear un archivo .php con este contenido.

<?php phpinfo(); ?>

Ejecutarlo en cualquier dominio y ver si la extensión aparece instalada. Otra opción, y mas fácil de ver si esta funcionando, es instalar el plugin para WP TPC Memory usage, que es el del screenshot y verificar en las opciones dentro de la lista de extensiones instaladas si se encuentra la de eAccelerator.

Nota: Buscando mas información sobre eAccelerator y WordPress veo que Andrés en Anieto2k comenta que utilizando Zend Optimizer los resultados pueden ser aún más impresionantes. Será cuestión de probar :D

Plugin de WordPress para activar eAccelerator

Ahora si no tenes acceso a ssh y no hay forma de modificar la configuración de tu servidor hay una alternativa. Instalar un plugin que activa por nosotros las ventajas de eAccelerator.

Ademas del plugin de eAccelerator en Neosmart nos permiten descargar otro que activa XCache, que hace prácticamente lo mismo, esta ultima alternativa para crear cache PHP es muy similar y aunque no los probé leí en varios lados que es igual de buena. Si alguno tiene ganas y tiempo puede hacer la prueba a ver cual funciona mejor.

Los plugins por lo que leí estan en una etapa muy experimental, asi que es cuestión de hacer la prueba y ver si funciona y que tal es el rendimiento en nuestro servidor. Por favor si alguien lo hace avise en los comentarios :D

Pablo

Programador desde hace más de 11 años, adicto a internet, cafeinómano, fanático de la información, intento de emprendedor, trabaja de forma compulsiva solo en lo que ama. Sueña con tener una aplicación con más de 1 millón de usuarios.

Comentarios

  1. Francisco Responder

    Bastante ilustrativa la prueba.

    Por cierto, el plugin w3 total cache tiene soporte para eaccelerator y pueden complementarse muy bien.

  2. Pablo Responder

    @Francisco: Excelente consejo, voy a instalarlo el fin de semana y hacer pruebas! gracias :D

  3. Brian.ERC Responder

    A mi me queda una duda, esto afectaría los códigos javascript? por ejemplo sistemas de publicidad como HotWords / infolinks ? o sistemas como Analytics?

    El plugin para WP es tan efectivo como instalarlo en el servidor? :P

    Se feliz! :D

  4. Pablo Responder

    @Brian.ERC: Te comento, esto no afecta en lo mas minimos a javascript por lo que los sistemas de publicidad ni ningun otra cosa se veria modificado y podrias usarlo sin problemas :D

    El plugin de WP no lo pude probar yo, pero en teoria hace lo mismo que la instalacion del lado servidor por lo que seria practicamente igual, y no digo exactamente igual porque no vas a poder configurarlo tan al detalle como si escribieras vos mismo el archivo de configuracion.

    Saludos!

  5. Dynn Responder

    Pero esto serial algo como WP Super cache? de no serlo, podrian funcionar juntos?

  6. Pablo Responder

    @Dynn: Esto no es como el wp-super cache, porque esto cache los scripts php, a diferencia del supercache crea una copia estatica de la ejecucion final, y respondiendo a tu segunda pregunta si, y perfectamente, en mi caso utilizo wp cache sin ningun problema :D

  7. Dynn Responder

    Pablo una pregunta, ya hice lo de los comandos en consola, pero ahora como instalo el Plugin, lo descargue y lo subi a la carpeta correspondiente de plugins en WordPress, pero este ni me lo detecta en el panel, por lo tanto no lo he podido instalar.

    Saludos!

  8. Mazcue Responder

    Gracias, puede ser una solución para nosotros. Ya se lo estoy pasando a mi programador (fazcue) ;)

    Abrazo.

  9. Pablo Responder

    @Mazcue: Dale buenisimo, es interesante usarlo te digo a mi me salvo de actualizar el VPS dos planes para arriba, asi que funcionar funciona, aunque siempre hay que ver cada caso en particular :D

    Cualquier cosa avisame!

  10. Pablo Responder

    @Dynn: Si lo hiciste por consola no necesitas el plugin, el plugin es para el que no tiene la posibilidad de instalar eAccelerator directamente en el server, ya con lo que hiciste deberia funcionar :D

  11. j0an Responder

    estoy probando instalar esto en un VPS con CentOS 5 y en la linea de Phpize. me da

    -bash: Phpize.: command not found

    y en la siguiente

    root@vps [/tmp/eaccelerator-0.9.5.2]# phpize
    Configuring for:
    PHP Api Version: 20090626
    Zend Module Api No: 20090626
    Zend Extension Api No: 220090626
    /usr/local/bin/phpize: /tmp/eaccelerator-0.9.5.2/build/shtool: /bin/sh: bad interpreter: Permission denied
    Cannot find autoconf. Please check your autoconf installation and the
    $PHP_AUTOCONF environment variable. Then, rerun this script.

    alguna mano por aqui?

  12. Pablo Responder

    @j0an: Fijate con el comando “whereis phpize” ese te tendria que devolver la ruta donde esta instalado, seguramente en tu vps las herramientas de desarrollo estan metidas en algun directorio, en base al resultado ejecuta exactamente la misma linea pero añadiendo la ruta :D

    Avisame!

  13. j0an Responder

    root@vps [~]# whereis phpize
    phpize: /usr/bin/phpize /usr/local/bin/phpize /usr/man/man1/phpize.1

    ejecuto

    root@vps [~]# /usr/bin/phpize
    Cannot find config.m4.
    Make sure that you run ‘/usr/bin/phpize’ in the top level source directory of the module

  14. Pablo Responder

    j0an: Proba lo siguiente, una vez que descomprimiste el eaccelerator y entraste a esa carpeta:

    export PHP_PREFIX=”/usr”
    $PHP_PREFIX/bin/phpize
    ./configure –enable-eaccelerator=shared –with-php-config=$PHP_PREFIX/bin/php-config
    make
    make install

    Si funciona directamente saltas a la creacion del .ini y de ahi en adelante no deberia joder :D

    Avisame

  15. j0an Responder

    en el .configure…

    configure: error: invalid variable name: –enable-eaccelerator

    FUUUUUUUU

  16. Pablo Responder

    j0an: jajaja, que raro che, podes probar tambien solo usando

    ./configure –enable-eaccelerator

    Ahi solo con eso también tendria que funcionar y despues hacer el make sin dramas!

    Avisa :D

  17. j0an Responder

    esto de no saber que esta haciendo uno.. y que de errores por todos lados…
    desisto por el momento, dsp intento nuevamente

  18. Gustavo Responder

    Hola,

    Antes de nada perdonad que soy muy novato.
    Estoy intentando instalarlo, y todo va correcto hasta que hay que crear vi /etc/php.d/eaccelerator.ini [Enter]

    Ahí me aparecen unos espacios en los que puedo incluir

    extension=”eaccelerator.so”
    eaccelerator.shm_size=”0″
    eaccelerator.cache_dir=”/var/cache/eaccelerator”
    eaccelerator.enable=”1″
    eaccelerator.optimizer=”1″
    eaccelerator.check_mtime=”1″
    eaccelerator.debug=”0″
    eaccelerator.filter=”"
    eaccelerator.shm_max=”0″
    eaccelerator.shm_ttl=”0″
    eaccelerator.shm_prune_period=”0″
    eaccelerator.shm_only=”0″
    eaccelerator.compress=”1″
    eaccelerator.compress_level=”9″

    Pero despues me aparece –INSERT– y no puedo continuar con la instalación.

    Me podeis indicar como continuo??

    Gracias

  19. Pablo Responder

    @Hola Gustavo!

    Te cuento para poder insertar se utilizan los comandos basicos de vi http://es.wikipedia.org/wiki/Vi

    Espero que sean de tu utilidad :D

  20. Gustavo Responder

    Gracias Pablo!
    Ya puedo salir de ello, y el caso es que creia haberlo logrado pero no…
    El caso es que despues de make install me sale
    Installing shared extensions: /usr/lib64/php/modules/
    Puede tener algo que ver, estoy creando la ruta del archivo de forma erronea?

    Disculpa pero es que estoy haciendo mis primeros pinitos en esto como podras ver ;)

  21. Jose Maria Responder

    El problema es que, al menos con la ultima version de Eaccelerator, no se puede activar en W3 Total Cache.
    ¿Alguien tiene un fix para esto?

    Un saludo.

  22. Plaga Responder

    Disculpa una pregunta como le haces para ver esta sección (http://www.kabytes.com/wp-content/uploads/2010/03/consumo-ram-wordpress.png) del plugin TPC! Memory Usage en que parte esta? porque no lo encuentro :S
    Salu2 y gracias.

  23. Plaga Responder

    Hahahahaa olvidalo XD ya vi, nunca se me ocurrio ver en el escritorio XD

  24. pfd Responder

    Hola,
    Estoy intentando subirlo, pero me quedo bloqueado con phpize. El comando no esta cargado y no consigo subirlo. ¿He provado subiendo php5-dev, pero no me aclaro.
    Alguien puede orientarme paso a paso?

    Gracias

  25. paintball madrid Responder

    Gracias chicos…..tenia muchas dudas.

Realizar un comentario