Cache de scripts PHP con eAccelerator
Continuando el tema de uno de mis artículos anteriores, sobre cómo mejorar el rendimiento de un sitio web desarrollado en PHP, en esta ocasión explico una forma diferente, basada en la utilización un sistema de caché para el código interpretado por PHP. Como seguramente sabrás PHP no es un lenguaje compilado, sino que cada vez que se realiza una petición de página, ésta se interpreta generando una estructura de datos intermedia que a continuación es ejecutada.
Es en este punto donde entran en acción diversos sistemas de caché, de forma que cuando PHP solicita abrir la página para obtener su estructura, estos sistemas le devuelven ya la estructura preparada, sin necesidad de volver a interpretarla. De esta forma se obtienen mejoras en el rendimiento del servidor y un incremento de velocidad que puede ser de 10 veces más rápido.
Para utilizar uno de estos sistemas no es necesario modificar nuestras páginas en ningún sentido, ya que se instalan como extensiones de PHP. Los sistemas más utilizados son ionCube PHP Accelerator, el Zend Optimizer, que es de pago, y principalmente el Turck MMCache. Este último es sin lugar a dudas el más usado, yo mismo lo he utilizado en bastantes proyectos, sin embargo lleva bastante tiempo parado, por lo que en este artículo vamos a explicar un proyecto reciente heredero suyo, eAccelerator.
Instalación
La instalación de cualquiera de estos sistemas es equivalente y realmente sencilla. Voy a explicar cómo realizar una instalación a partir de los fuentes, aunque es posible instalar directamente los binarios.
El primer paso consiste en obtener el paquete con la última versión disponible y descomprimirlo en nuestro servidor.
bash# tar xvfzp eaccelerator-0.9.3.tar.gz bash# cd eaccelerator-0.9.3 |
Una vez descomprimido el paquete con los fuentes y ya dentro de su directorio, tenemos que compilar los fuentes. Para ello debemos ejecutar los siguientes comandos, cambiando en la primera línea /usr
por la ubicación real en la que tengamos instalado PHP. Por ejemplo, si lo tuviéramos instalado en «/usr/local/php», utilizaríamos esa cadena.
bash# export PHP_PREFIX="/usr" bash# $PHP_PREFIX/bin/phpize bash# ./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config bash# make |
Una vez terminados estos pasos ya tendríamos el módulo preparado, es el momento de instalarlo.
bash# make install |
Como resultado de la instalación se nos indicará en qué carpeta del servidor se ha copiado el módulo, por ejemplo:
Installing shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20020429/ |
Configuración
Para que los scripts PHP de nuestro servidor comiencen a cachearse es necesario configurar PHP para que utilice la extensión que hemos creado y además decirle cómo debe usarla. Para ello y antes de nada, recomiendo que si en el paso anterior el módulo no se ha ubicado dentro de la carpeta «extensions» sino dentro de alguna subcarpeta, lo movamos a ella.
bash# mv /usr/lib/php/extensions/no-debug-non-zts-20020429/eaccelerator.so /usr/local/php/lib/php/extensions |
Una vez ubicada la extensión en esa carpeta ya podemos configurarla en PHP. Para ello debemos editar el archivo php.ini, que normalmente estará ubicado en «/etc/php.ini», aunque si no lo encontramos siempre podemos ejecutar un phpinfo()
para obtener su ubicación.
Ya editando el archivo, debemos buscar la sección «Dynamic Extensions» y pegar en ella las siguientes líneas:
extension="eaccelerator.so" eaccelerator.shm_size="16" eaccelerator.cache_dir="/tmp/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" |
Deberemos asegurarnos también de que la carpeta utilizada para las extensiones coincida con la que hemos dejado el archivo eaccelerator.so, y si no es así, bien mover el archivo a la carpeta que se indique en el php.ini, o cambiar el valor de esa directiva de configuración.
extension_dir = "/usr/lib/php/extensions/" |
Por último deberemos crear el directorio de caché donde se guardará el código interpretado «/tmp/eaccelerator». eAccelerator trabaja guardando la información en memoria compartida, pero en algunos casos puede ser necesario escribir la información a disco, para lo cual es necesario crear esta carpeta.
bash# mkdir /tmp/eaccelerator bash# chmod 0777 /tmp/eaccelerator |
Probando la instalación
Una vez realizados los puntos anteriores ya podemos reiniciar el servidor web y comprobar que la extensión se ha instalado correctamente. Para esto lo más sencillo será crear una página con el siguiente código y ejecutarla en el navegador:
<?php phpinfo(); ?> |
Si todo ha ido correctamente, en la caja con el logo de «Powered by ZEND», debería aparecer un texto similar a «with eAccelerator v0.9.3, Copyright (c) 2004-2004 eAccelerator, by eAccelerator». A partir de este momento todas las páginas PHP que solicitemos harán uso del acelerador.
En la siguiente página explico algunas posibilidades que tiene la extensión y que pueden ser de utilidad, como activar o no el acelerador por dominios, utilizarlo como codificador…
Páginas: 1 2
Yo suelo usar Turck-MMCache.
Es verdad que el desarrollo está estancado desde hace meses, pero no es difícil recompilar los fuentes actuales en el CVS para hacerlos funcionar con la versión de PHP que tengamos instalada.
Más que un problema de versiones, el motivo que ha hecho que me pasara a eAccelerator ha sido que en éste se van incorporando más funcionalidades y resolviendo bugs. En cualquier caso he utilizado MMCache durante mucho tiempo y sin ningún problema, es simplemente que dado que el proyecto parece paralizado, creo que tiene más sentido en instalaciones nuevas utilizar eAccelerator, sobretodo teniendo en cuenta que es practicamente equivalente.
Se dice que eAccelerator es compatible con el Encode de PHP, sin embargo los scripts «encodeados» con el Turck no pueden ser ejecutados con eAcelerator (eLoader). Aunque aún no he visto las funcionalidades del EA. (en una comparativa…) pero supongo que deben ser mejores que el viejo Turck
como hacer para que despues de ejecutarse una serie de sentencias con codigo php vuelva a otra pagina.
Hola:
Para quienes usen Cpanel, aquí una versión del tutorial que escribió Esteban de Infranetworking:
http://www.comunidadhosting.com/showthread.php?p=29771
Muchas gracias!