10 Mar
7 Comentarios

Mejorar el rendimiento con APC

Publicado por César Gómez hace 1 año en: Configuración, Magento, Tutoriales

Ya sabemos que Magento es una plataforma muy bien diseñada, extensible y muy versátil. Pero también es cierto que su rendimiento en determinadas configuraciones no es demasiado bueno. Esto es debido, entre otras cosas, a la gran cantidad de ficheros de código que ha de abrir y ejecutar en cada petición para componer una página de respuesta que mostrar al usuario. Esto hace que el tiempo que tarda magento en servir una página sea largo y que, en consecuencia, el número de peticiones por segundo sea bajo. Una buena forma de aumentar ese número de peticiones, es activar la cache de magento desde el menu ‘System->Cache Management’, allí seleccionamos ‘Enable’ en el desplegable y pulsamos sobre el botón ‘Save cache settings’.

Menú Cache Management
Habilitar Cache
Botón Guardar

Esta opción mejora el rendimiento de magento considerablemente, pero hay algo más que podemos hacer para mejorar ese rendimiento: Activar APC o Alternative PHP Cache.

APC es un modulo de PHP que implementa un sistema de cache de código intermedio, abierto y libre.
PHP es un lenguaje interpretado, eso quiere decir que los ficheros de código fuente se abren e interpretan cada vez que se necesita ejecutar algo. El interprete de PHP genera un código intermedio, llamado “opcode”, que se ejecuta y genera el resutado para el que se haya programado dicho código fuente. APC actúa de forma transparente, almacenando ese código intermedio en memoria  y ejecutándolo cada vez que se solicita, de modo que no es necesario volver a abrir e interpretar los ficheros con el código fuente para ejecutarlos, con lo que se ahorra tiempo y accesos a disco, acelerando así de forma considerable la carga de la página.

Existen otras soluciones parecidas a APC con el mismo propósito, los llamados aceleradores de PHP,  pero APC tiene una ventaja respecto a los demás a la hora de ayudarnos a mejorar el rendimiento de magento. APC dispone de un framework con el que podemos interactuar desde nuestro código php para mejorar esa ‘aceleración’, y magento está preparado para utilizar ese framework en el caso de que tengamos instalado APC en nuestro servidor.

Puesto que la instalación de APC es diferente dependiendo del sistema en el que estemos tranajando, no es posible explicar aquí su instalación para todo el mundo. En Ubuntu Hardy Heron, el sistema operativo de mi servidor, su instalación es muy fácil:

  1. Actualizamos la lista de paquetes ejecutando en un terminal lo siguiente:
    sudo apt-get update
  2. A continuación instalamos los paquetes necesarios para la instalación de APC. De nuevo en un terminal:
    sudo apt-get install php5-dev php-pear apache2-threaded-dev
  3. Lo siguiente es la instalación de APC en si ejecutando:
    sudo pecl install apc
  4. Tras esto solo queda decirle a php que queremos utilizar APC para lo que añadiremos lo siguiente al archivo php.ini:
    extension=apc.so
    
    [APC]
    apc.enabled = 1
    apc.shm_segments = 1
    apc.shm_size = 64
    apc.max_file_size = 10M
    apc.stat=1
  5. Para que el cambio sea efectivo hay que reiniciar el servidor web.
  6. Por último, una vez reiniciado el servidor web y, por ello, activado el módulo APC, hay que decirle a magento que puede utilizarlo. Para ello se edita el fichero app/etc/local.xml y añadimos lo siguiente en la sección ‘global’:
     
    <cache>
        <backend>apc</backend>
        <prefix>alphanumeric</prefix>
    </cache>

    De este modo de indicamos a magento que tiene disponible APC.

Para ver que efectivamente este cambio influye positivamente en el rendimiento de magento, hice una serie de pruebas con distintas configuraciones. Para realizar las pruebas, he sometido al servidor a sesiones de 100 peticiones con 5 usuarios concurrentes y he medido el tiempo medio de cada llamada así como el número de peticiones por segundo. A continuación os dejo con los resultados:

Tiempo porpetición en ms

Peticiones por segundo

no APC no Cache = sin APC y sin la caché de Magento.
APC no Cache = sólo con APC.
no APC Cache = sólo con la caché de Magento
APC Cache = con APC y la caché de Magento.
APC XML no Cache = con APC activado en PHP y en Magento solamente
APC XML Cache = activado APC en PHP y en Magento y con la caché de Magento activada.

Como podeís ver el aumento del rendimiento con APC es notable.

7 Comentarios


  1. Excelente información y da gusto una explicación apta para todos los públicos. Y las gráficas convencen a cualquiera.

    Espero que los administradores de las empresas de hosting con soporte para Magento tomen nota de esta optimización.

    Por cierto, si alguno de ellos nos está leyendo, que nos comente sus políticas de optimización y así de paso aprovecha para hacer publicidad (en este caso pertinente y relevante) de sus servicios.

    #1
  2. Hola,

    He detectado en multitud de tiendas hechas con Magento problemas.
    Concretamente el más común que he visto es el de redirección a la página principal cuando haces click en cualquier producto.

    Se sabe por que ocurre esto? ahora mismo, por ejemplo, ocurre en:

    http://tienda.summarios.com/index.php/
    http://www.minirepublic.com
    http://www.enamora.de/

    #2
  3. Hola Juan,

    Pues la verdad es que es la primera vez que veo esto, yo he entrado en las tiendas que me dices, y no me ocurre ese problema.
    Una posible causa puede estar en el sistema de cache, si por alguna causa, algún producto desaparece, cambia se categoría o cosas así, si no se refresca la cache, puede dar problemas de páginas no encontradas. Si el 404 esta redirigido a la portada, pues puede ser eso. Otra posible causa podría ser una mala configuración del fichero .htaccess. Pero ya te digo nunca me ha pasado, si se da el caso podré investigar un poco más.

    #3
  4. Gracias por responder César,

    ahora, desde casa, veo esas tiendas sin problemas.
    de todas formas, vi estos hilos en el foro…

    http://www.magentocommerce.com/boards/viewthread/38826/
    http://www.magentocommerce.com/boards/viewthread/25934/

    Por cierto, conoces tiendas españolas importantes hecha con Magento?

    Gracias, un saludo y enhorabuena por tu blog, me parece muy interesante.

    #4
  5. Que tal, pues eh intentado aplicar esta solucion para mejorar la velocidad de mi sitio. Sin embargo al instalar APC el sitio de inmediato responde todo con Error 500.

    Trabaja bajo un VPS con S.O. CentOS.

    Alguna idea de el por que, y como solucionarlo ¿:S?

    #5
  6. Hola Ivan, la verdad es que sin saber nada más es complicado saber que pasa. Mira el log de errores de apache a ver si hay algo que pueda darte una pista. Tanto al reiniciar apache como al intentar cargar magento.

    #6
  7. Hay una cosa que me preocupa. He notado que para simples cosas como listar productos aveces puede llegar a hasta 86 o 96 consultas a la base de datos.

    #7

Dejanos un comentario

Tu email nunca será publicado o compartido. Los campos requeridos están marcados con *


Los comentarios son responabilidad de su autor y sujetos a moderación