Caché PHP alternativo (APC) con W3 Total Cache para WordPress

PHP es un lenguaje muy popular para sitios web dinámicos como los que usan WordPress. Analizar scripts PHP y convertirlos a opcode, y convertirlos nuevamente a código de máquina puede resultar bastante agotador para la CPU. Esto a su vez afecta la velocidad y el rendimiento del sitio. En mis publicaciones anteriores (esta y ésta), mostré cómo verificar la velocidad de carga del sitio y describí algunas formas de mejorarla. En esta publicación, voy a describir cómo instalar y usar caché PHP alternativo (APC) para almacenar en caché archivos/códigos PHP. Esto da como resultado un tiempo de ejecución más rápido, una reducción de la carga de la CPU y una mejor velocidad del sitio. Para aquellos que autohospedan su sitio de WordPress o cuyo proveedor de hosting ofrece APC, también les voy a explicar cómo hacer que APC funcione con W3 Total Cache, el mejor complemento de caché de WordPress.

Guías recomendadas en WordPress:

Cómo funciona el caché PHP alternativo

Los cachés de APC acceden con frecuencia a archivos y códigos PHP en opcode formato, que es el código intermedio de los scripts PHP analizados y compilados. Los códigos de operación almacenados en caché están en la memoria compartida y se sirven cuando es necesario, lo que reduce la necesidad de analizar y compilar códigos PHP nuevamente. A diferencia de otros sistemas de almacenamiento en caché como memcached APC almacenó tanto el código de operación como los datos. Memcached almacena solo los datos a los que acceden las aplicaciones a través de TCP. Por lo tanto normalmente (hay excepciones), si tienes APC instalado y funcionando, no necesitas memcached.

Paso 1: instale APC en Ubuntu

A diferencia de versiones anteriores de Ubuntu, la instalación de APC en Lucid Lynx (10.04) y versiones posteriores es extremadamente sencilla. Está disponible a través del repositorio. Aunque puede compilar e instalar la última versión de APC (el repositorio de Ubuntu normalmente está un poco desactualizado), recomiendo seguir la ruta de instalación del repositorio por razones de compatibilidad. Puede instalar APC usando el siguiente comando:

sudo apt-get install php-apc

Durante el proceso de instalación, se le harán una serie de preguntas sobre la activación de módulos experimentales. Le recomiendo que no habilite los módulos experimentales. Puedes presionar Enter para elegir el [defaults]:

Enable internal debugging in APC [no] :
Enable per request file info about files used from the APC cache [no] :
Enable spin locks (EXPERIMENTAL) [no] :
Enable memory protection (EXPERIMENTAL) [no] :
Enable pthread mutexes (default) [yes] :
Enable pthread read/write locks (EXPERIMENTAL) [no] :

Reinicie Apache:

sudo service apache2 reload

Paso 2: verificar la instalación de APC

Puede verificar si APC está instalado y ejecutándose usando el siguiente comando:

php -r "phpinfo();" | grep apc

El resultado debería ser similar al que se muestra a continuación. No se preocupe todavía por los detalles del resultado. Variará según la configuración de APC, que se analiza más adelante en esta publicación.

Additional .ini files parsed => /etc/php5/cli/conf.d/apc.ini,
apc
MMAP File Mask => /tmp/apc.XXXXXX
apc.cache_by_default => On => On
apc.canonicalize => On => On
apc.coredump_unmap => Off => Off
apc.enable_cli => Off => Off
apc.enabled => On => On
apc.file_md5 => Off => Off
apc.file_update_protection => 2 => 2
apc.filters => no value => no value
apc.gc_ttl => 0 => 0
apc.include_once_override => Off => Off
apc.lazy_classes => Off => Off
apc.lazy_functions => Off => Off
apc.max_file_size => 10M => 10M
apc.mmap_file_mask => /tmp/apc.XXXXXX => /tmp/apc.XXXXXX
apc.num_files_hint => 4096 => 4096
apc.preload_path => no value => no value
apc.report_autofilter => Off => Off
apc.rfc1867 => Off => Off
apc.rfc1867_freq => 0 => 0
apc.rfc1867_name => APC_UPLOAD_PROGRESS => APC_UPLOAD_PROGRESS
apc.rfc1867_prefix => upload_ => upload_
apc.rfc1867_ttl => 3600 => 3600
apc.shm_segments => 1 => 1
apc.shm_size => 128 => 128
apc.stat => On => On
apc.stat_ctime => Off => Off
apc.ttl => 7200 => 7200
apc.use_request_time => On => On
apc.user_entries_hint => 4096 => 4096
apc.user_ttl => 7200 => 7200
apc.write_lock => On => On

Paso 3: Verifique la interfaz web de APC

APC viene con una excelente interfaz web que proporciona una gran cantidad de información. No está habilitado de forma predeterminada. Para habilitarlo tendrás que copiar un archivo a la raíz de tu sitio web:

sudo cp /usr/share/doc/php-apc/apc.php.gz /var/www
sudo gzip -d /var/www/apc.php.gz
sudo vim /var/www/apc.php

Aún no hemos terminado. Por razones de seguridad, le recomiendo que edite apc.php archivo y cambie el nombre de usuario y la contraseña predeterminados (apc y password):

defaults('ADMIN_USERNAME','apc'); // Admin Username
defaults('ADMIN_PASSWORD','password'); // Admin Password - CHANGE THIS TO ENABLE!!!

Además, asegúrese USE_AUTHENTICATION se establece en 1:

defaults('USE_AUTHENTICATION',1);

Ahora puedes ir a tu domainname.com/apc.php (Si tienes uno), 192.168.0.13/apc.php (si es la IP de red de su servidor en el que tiene APC ejecutándose), o localhost/apc.php si está en la máquina que ejecuta APC. A continuación se muestra una captura de pantalla de la interfaz web muy informativa.

Interfaz web de Apc

Paso 4: personaliza la configuración de APC

La configuración predeterminada de APC almacenada en /etc/php5/conf.d/apc.ini Puede funcionar bien, pero se recomienda modificar algunos valores. Puede encontrar una explicación detallada de estos valores aquí.

Si tiene instalado el complemento W3 Total Cache para WordPress, viene un apc.ini presentar en \wp-content\plugins\w3-total-cache\ini carpeta que tiene algunos buenos valores predeterminados. Te recomiendo que aún cambies los siguientes valores:

apc.estadísticas

Durante el desarrollo y las pruebas, configúrelo en «1» (habilitado). Cuando se establece en uno, los cambios de archivos se verifican cada vez que se llama a un código de operación almacenado en caché. Por lo tanto, cualquier cambio que realice será visible inmediatamente. La configuración de W3 Total Cache funcionará solo si este valor se establece en «1». Una vez que haya terminado con todas las ediciones y cambios, vuelva a establecer este valor en «0» (deshabilitado) para mejorar el rendimiento y la velocidad, ya que APC volverá a verificar los archivos durante cada solicitud.

apc.shm_size

Este es el tamaño real del caché. El valor predeterminado es 30 MB (o 32 MB si usa W3 Total Cache). apc.ini archivo). Recomiendo aumentarlo si tienes suficiente memoria RAM disponible. Recomiendo aumentarlo a, digamos 128 MB, como yo lo hice. La recomendación es asignar al menos el doble de la cantidad de memoria más alta utilizada por APC. Supervise APC con frecuencia durante varias horas (lo supervisé durante 1 día). Como se muestra en la imagen a continuación (de la interfaz web de APC), en promedio mi APC usó alrededor de 45 MB de los 128 MB asignados. Por lo tanto, sólo necesito asignar 90 MB. Como el espacio de RAM no es una preocupación para mí, lo dejaré en 128 MB.

Diagrama de estado del host de Apc

La cantidad de memoria asignada para apc.shm_size afectará hits/misses, cache full county fragmentation. Los aciertos/errores son cosas malas que están en el caché versus aquellas que no están en el caché. Es normal ver algunos fallos. Como se muestra en la imagen de arriba, el mío se mantuvo prácticamente por encima del 99% después de unos minutos de ejecutar APC. Si ves el cache full count (que se muestra en la captura de pantalla de la interfaz web a continuación) aumente rápidamente y luego aumente la memoria asignada.

Información de caché de archivos Apc

Guías recomendadas en WordPress:

Si la fragmentación alcanza el 100% y permanece allí, es posible que aparezca el «Error HTTP 500 Error interno del servidor». Normalmente se ve una fragmentación del 100% en los primeros minutos después de habilitar APC. Con el tiempo, es deseable tener menos del 50 % de fragmentación (idealmente alrededor del 10 % o menos). Como se muestra en la imagen a continuación, el mío normalmente se mantiene alrededor del 10% o menos.

Uso y fragmentación de la memoria Apc

Recuerde reiniciar Apache, después de cualquier cambio. A continuación se muestra mi completo apc.ini archivo:

extension=apc.so
apc.enabled = 1
apc.stat = 1
apc.shm_segments = 1
apc.shm_size = 128
apc.optimization = 0
apc.num_files_hint = 4096
apc.ttl = 7200
apc.user_ttl = 7200
apc.gc_ttl = 0
apc.cache_by_default = 1
apc.filters = ""
apc.mmap_file_mask = "/tmp/apc.XXXXXX"
apc.slam_defense = 0
apc.file_update_protection = 2
apc.enable_cli = 0
apc.max_file_size = 10M
apc.write_lock = 1
apc.report_autofilter = 0
apc.include_once_override = 0
;apc.rfc1867 = 0
;apc.rfc1867_prefix = "upload_"
;apc.rfc1867_name = "APC_UPLOAD_PROGRESS"
;apc.rfc1867_freq = 0
apc.localcache = 0
apc.localcache.size = 512
apc.coredump_unmap = 0
apc.stat_ctime = 0

Paso 5: Configurar W3 Total Cache para usar APC

W3 Total Cache es, con diferencia, el mejor complemento de almacenamiento en caché para WordPress. Aunque comencé con Quick Cache, desde entonces cambié a W3 Total Cache.

La parte difícil de instalar y configurar APC ya está hecha. Configurar W3 Total Cache para usar APC es fácil. Todo lo que tienes que hacer es desde tu panel de WordPress ir a Performance->General Settings y elija APC para caché de página (que se muestra en la imagen siguiente), Minificar, caché de objetos y caché de base de datos:

Caché total de W3: configuración general

De manera similar, elija APC para Minify, Object Cache y Database Cache. De hecho, le recomiendo que habilite la caché de la base de datos sólo si tiene APC en ejecución. El almacenamiento en caché de bases de datos en disco puede no ser el mejor para el rendimiento (al menos eso es lo que mostró mi investigación).

Si recibe un error que dice que la reescritura de Minify no funciona, verifique la configuración en .htaccess. Si aún ve el error, puede considerar desactivar «Reescribir estructura de URL» en Minify.

Cuando buscaba instalar y configurar APC, me costó mucho descubrir todos los detalles. Esta publicación resume todo lo que necesita saber para instalar y configurar el caché PHP alternativo en Ubuntu y hacerlo funcionar con W3 Total Cache para WordPress. En mi caso, las puntuaciones de GTMetrix y Pingdom aumentaron ligeramente después de hacerlo. Espero que esto ayude. Si tiene otras ideas, compártalas con nosotros en la sección de comentarios.