Beta, como Goooogle
1 May
En estos tiempos de Web 2.0 las aplicaciones online requieren cada vez un mejor rendimiento por parte del servidor. El mundo de la optimización de aplicaciones es un tema que da mucho para hablar, hay soluciones complejas que requieren replantear gran parte del proyecto y otras que se pueden aplicar en unos pocos minutos.
Una de esas optimizaciones rápidas de aplicar es mejorar la manera en la que son ejecutadas las aplicaciones PHP, para webs desarrolladas en este lenguaje, obviamente.
Aunque PHP sea un lenguaje interpretado, es decir, que no necesitamos más que subir los ficheros .php y directamente el intérprete se encarga de ejecutarlos, sin necesidad de haberlos compilado previamente. Pero en realidad, lo que hace el intérprete es “parsear” el código, compilarlo en bytecode y por último ejecutar este bytecode. Estas operaciones se realizan una y otra vez por una petición que se hace a un script PHP. Viendo esto, sin mucho esfuerzo podemos pensar que lo más lógico sería “parsear” y compilar en bytecode el código fuente una sola vez, mantener en memoria el bytecode mientras no se modifique el código fuente y ejecutar solamente el bytecode por cada petición.
Pues bien, esto es lo que hace APC. Este sistema reserva una zona de la memoria para cachear bytecodes. Cuando llega una petición a un fichero PHP, APC revisa si ese fichero ya está en la cache, si está en cache y el fichero no se ha modificado desde la última vez que se cacheó, entonces se ejecuta el bytecode que hay en cache. Si no, APC se encargará de actualizar el bytecode en cache para que las próximas peticiones sean más rápidas.
¿Por qué APC? Hay otros sistemas que implementan el mismo concepto, algunos de ellos se pueden ver comparados en la Wikipedia, pero APC se ha convertido en el acelerador oficial de PHP, ya que va a ser integrado su desarrollo a partir de PHP 6. Además, es muy fácil de instalar como podemos comprobar a continuación.
Para instalar APC en Debian se pueden seguir los pasos siguientes. Aunque en otras distribuciones el procedimiento es muy similar.
1 – Instalamos los paquetes necesarios
# apt-get install apache2-prefork-dev php5-dev php-pear
2 – Ejecutamos pecl, el instalador de extensiones de php
# pecl install apc
3 – Modificamos el fichero /etc/php5/apache2/php.ini y añadimos al final:
extension=apc.so
4- Reiniciar apache
# /etc/init.d/apache2 restart
Listo. Para comprobar que todo ha funcionado correctamente tan solo tenemos que crear un fichero con la instrucción phpinfo(); para ver si aparece la extensión APC.

Por último, para monitorizar el funcionamiento de APC podemos copiar el script que hay en /usr/share/php/apc.php a un directorio accesible desde http y al entrar en él http://xx.xx.xx.xx/apc.php, se pueden ver varios gráficos y tablas de información con el estado de APC. También es posible modificar el archivo apc.php para indicar una contraseña y así acceder a la zona privada con algunos datos más sobre el cacheo de scripts.
Después de haber instalado el APC en algunos servidores, la impresión es que la carga se ha reducido notablemente. Es una impresión personal, ya que no he tenido tiempo de hacer mediciones más serias.
16 Abr
Cualquier usuario mínimamente experimentado en linux sabe que mediante el comando “uptime” podemos ver, además del tiempo que lleva arrancado el sistema, cómo está de cargado. Cuando ejecutamos “uptime” nos devuelve algo así:
20:30:26 up 29 days, 21:36, 1 user, load average: 0.42, 0.51, 0.62
Todo está bastante claro excepto los tres últimos números, 0.42, 0.51, 0.62. Sabemos que es un valor que indica la carga del sistema, mientras más alto sea el número mayor es la carga del sistema.
¿Pero por qué hay tres números?
El primero es la carga media durante el último minuto, el segundo es la carga media de los últimos 5 minutos y el tercero indica la carga media de los últimos 15 minutos.
Bien, sólo queda saber una cosa, ¿qué significa realmente el número? ¿Por qué un 0.42 y no un 2, o un 50, o cualquier otra numeración?
Aunque el origen del valor viene dado por el número de procesos que entra o espera entrar en la “cpu” en un cierto intervalo de tiempo resulta que su interpretación es mucho más intuitiva de lo que parece.
En un sistema con una sola CPU (y un único núcleo) un valor de 1.0 signica que el sistema se está utilizando al 100% de su capacidad. Si por ejemplo en el mismo sistema tenemos un valor de 2.0 significa que para no tener ningún proceso en espera necesitaríamos una máquina el doble de rápida.
En el caso de que estemos en un sistema con más de una CPU o con más de un núcleo habrá que dividir el valor por el número de CPUs. Es decir, si tenemos un core duo y al lanzar uptime aparece un 2.0, estaremos usando el sistema al 100%
Yo estuve mucho tiempo sin saber qué significaba realmente este número y después de saberlo me ha sido muy útil para evaluar la carga de los servidores que manejo, por eso he decido compartirlo.