Acelerador de PHP APC (alternative PHP cache)

Puesto que PHP es un lenguaje interpretado, cada página tiene acceso mediante la ejecución del propio script, que este a su vez es parseado, analizado, compilado y finalmente ejecutado.

Este ciclo de cargar, analizar y compilar puede añadir una demora de tiempo en el procesamiento bastante elevado, especialmente cuando uno alberga un sitio web con un número de visitas considerable.

Los aceleradores cache de PHP tienen como objetivo solventar esta situación, reducir la demora y lograr mantener una versión compilada de la secuencia de comandos en memoria (o disco) consiguiendo en la siguiente petición servir el mismo script compilado, optimizando el ciclo natural de la ejecución de PHP.

APC tiene claras ventajas:
  • Reduce el tiempo en la carga de las páginas
  • Se puede manejar mediante el mismo PHP
  • Es transparente para la aplicación
  • Evita recompilar el código PHP por cada conexión
  • Disminuye la carga en el servidor, principalmente tiempo de CPU y consumo de memoria, lo cual es elemental para una web grande, o en particulares cuando sufren los famosos efectos de webs populares como meneame o digg.

Esto nos va a venir de perlas para aplicativos similares a drupal o wordpress u otros.

Ahora vamos a ver como podemos utilizarlo en GNU/Linux, para ello nos hará falta tener un servidor web como Apache y tener PHP instalado como módulo del mismo.

Puede que según la versión, tenga un paquete con distinto nombre, simplemente hay que seleccionar el más acorde.

Debian/Ubuntu:

$ sudo aptitude update
$ sudo apt-get install apache2-threaded-dev php5-dev php-pear make
$ sudo ln -s /usr/bin/apxs2 /usr/bin/apxs
$ sudo pecl install apc
$ sudo gedit /etc/php5/apache2/php.ini o bien /etc/php5/conf.d/apc.ini

Si en debian sale el mensaje “Sorry, I was not able to successfully run APXS.“, hay que instalar apache2-prefork-dev
$ sudo aptitude install apache2-prefork-dev

Ahora en el fichero php.ini añadiremos estas dos lineas al final:
extension=apc.so
apc.enabled=1


Finalmente reiniciamos el servidor web
$ sudo /etc/init.d/apache2 restart

Para instalaciones manuales desde los fuentes (válido para cualquier distribución Linux) previamente hay que tener instalado el servidor Apache y PHP, en este escenario, vamos a suponer que ambos programas los tenemos instalados en /usr/local, es decir:
/usr/local/apache
/usr/local/php


Ahora nos bajamos la última versión del APC de la web oficial. (actualmente la 3.0.19)

http://pecl.php.net/package/APC/

// Como usuario normal

$ cd /tmp
$ wget http://pecl.php.net/get/APC-3.0.19.tgz
$ tar xvfz APC-3.0.19.tgz
$ cd APC-3.0.19
$ /usr/local/php/bin/phpsize
$ ./configure --enable-apc --enable-apc-mmap --with-apxs=/usr/local/apache/bin/apxs --with-php-config=/usr/local/php/bin/php-config
$ make
// como usuario root
# make install

Esto nos instalará el módulo en /usr/local/php/lib/php/20060613/apc.so
Para la activación manual, editamos el fichero php.ini
# gedit /usr/local/php/etc/php.ini

Añadimos estas dos lineas alfinal del fichero php.ini:

extension=/usr/local/php/lib/php/20060613/apc.so (poner la ruta absoluta)
apc.enabled=1

Finalmente reiniciamos el servidor web
# apachectl stop
# apachectl start


Para verificar que está realmente activo el APC, podemos utilizar la linea de commandos de PHP o bien el módulo de Apache con una sencilla página PHP.

$ php -i | grep -i apc

O bien, crear una página estilo info.php:

<?php
phpinfo();
?>

Ambos commandos deberían de devolver respuesta confirmando la utilización del APC, por tanto, ya hemos logrado nuestro objetivo, nuestras aplicaciónes desde este momento y de manera transparente empezarán a utilizar el sistema de cache compilada en PHP.

De manera predeterminada, para la mayoría de usuarios las opciones por defecto son suficientes, en caso de querer experimentar comportamientos distintos, hay que leer las opciones de configuración que se deben añadir en el fichero php.ini e ir jugando con distintos valores hasta lograr los resultados esperados.

Salam Aleikoum!

2 Replies to “Acelerador de PHP APC (alternative PHP cache)”

  1. Excelente articulo hace rato que me desconecte de php pero tengo que hacer unas GUI’s jiji y bueno pensaba usar eaccelerator pero veo que mejor esta cosita jiji excelente articulo gracias por tu esfuerzo

  2. Que bueno! justo estaba buscando sobre este tema y la verdad tu articulo me parecio muy interesante.

    voy a poner en practica el APC, junto con algunos cambios en el apache para medir de cuanto es la performance.

    Gracias.

    Gerardo.

Deja un comentario

Tu dirección de correo electrónico no será publicada.