Manual:Ajuste de rendimiento
Esta página proporciona una visión general de diferentes formas de mejorar el rendimiento de MediaWiki.
Contexto
MediaWiki es capaz de escalar para satisfacer las necesidades de grandes grupos de wikis como los de la Fundación Wikimedia, WikiHow y Fandom, y puede aprovechar una amplia cantidad de métodos, incluyendo múltiples servidores de base de datos con balanceo de carga, almacenamiento en caché de objetos con memcached, cachés con Varnish (véase Manual:Varnish caching) y múltiples servidores de aplicaciones. Sin embargo, para la mayoría de las instalaciones pequeñas, esto resulta excesivo, y simplemente habilitar el almacenamiento en caché de objetos y optimizar el rendimiento de PHP debería ser suficiente.
Inicio rápido
Versión corta: recomendamos usar el caché de bytecode para PHP, APCu como caché de objetos local y Memcached como caché principal; esto es lo que utiliza la Fundación Wikimedia para Wikipedia y otros proyectos.
En algunos casos, el exceso de almacenamiento en caché en demasiados niveles puede degradar el rendimiento.
Inicio rápido con Puppet
La mayoria de los ajustes en esta pagina se han recopilado en un manifiesto puppet (puppet/modules/role/manifests/simple_performant.pp y puppet/modules/role/manifests/simple_miser.pp). Si instalas Puppet, puedes aplicarlos a tu servidor con un solo comando.
PHP
Caché de bytecode
PHP funciona compilando un archivo PHP en código intermedio y luego ejecutando ese código intermedio. El proceso de compilación de una aplicación grande como MediaWiki requiere un tiempo considerable. Los aceleradores de PHP funcionan almacenando el código intermedio compilado y ejecutándolo directamente, reduciendo el tiempo dedicado a compilar código.
Opcache está incluido en PHP 5.5.0 y posteriores, y es el acelerador recomendado para MediaWiki. (Compatibility § PHP).
Los cachés de opcode almacenan el resultado compilado de los scripts PHP, reduciendo en gran medida el tiempo necesario para ejecutar un script varias veces. MediaWiki no necesita configurarse para usar caché de bytecode en PHP, "simplemente funcionará" una vez instalado y habilitado.
Las versiones de MediaWiki 1.36 a 1.38 pueden ser más lentas en sistemas sin el almacenamiento en caché de opcode. Véase T274041.
Caché de objetos
Servidor local
Esta interfaz se utiliza para almacenamiento en caché ligero directamente en el servidor web. Se espera que esta interfaz persista los valores almacenados en todas las solicitudes web.
La presencia de un backend compatible es detectada automáticamente por MediaWiki. No es necesaria ninguna configuración de MediaWiki.
Para PHP 7+, deberías instalar APCu o WinCache. WinCache solo es compatible con MediaWiki ≤1.42.
Para instalar APCu, utiliza:
sudo apt-get install php-apcu php-igbinary
Un script, apc.php, se incluye con el paquete APCu que se puede utilizar para inspeccionar el estado de la caché, y también examinar el contenido de la caché de usuario para verificar que MediaWiki la esté utilizando correctamente.
Caché principal
Esta interfaz se utiliza como caché de objetos principal para objetos de mayor tamaño.
El caché principal está deshabilitado por defecto y debe configurarse manualmente.
Para habilitarlo, establece $wgMainCacheType con una clave en $wgObjectCaches.
Hay interfaces preconfiguradas para Memcached y MySQL.
Puedes configurar backends adicionales mediante $ObjectCaches (por ejemplo, para Redis).
// Default:
// $wgMainCacheType = CACHE_NONE;
Servidor web único
Si tienes APC instalado, se recomienda encarecidamente usarlo configurando lo siguiente en LocalSettings.php:
$wgMainCacheType = CACHE_ACCEL;
Una vez establecido, el almacenamiento de sesiones de usuario y la caché de salida del analizador también heredarán este ajuste de MainCacheType.
Al utilizar APC con una RAM limitada (y sin Memcached u otro caché de objetos configurado), puede que los objetos importantes sean expulsados con demasiada frecuencia debido al tamaño acumulado de la caché de salida del analizador.
Considera establecer $wgParserCacheType en CACHE_DB, el cual moverá esas claves a la base de datos.
Si usas $wgMainCacheType = CACHE_ACCEL; y los usuarios no pueden iniciar sesión debido a errores de "secuestro de sesión", considera sobrescribir $wgSessionCacheType a CACHE_DB.
Véase la tarea T147161 para más información.
Si no puedes usar APC, considera instalar Memcached (requiere al menos 80MB de RAM). Aunque instalar Memcached es considerablemente más complejo, resulta muy eficaz.
Si ni APC o Memcached son opciones, puedes recurrir a almacenar la caché de objetos en tu base de datos. El siguiente preajuste hará eso:
$wgMainCacheType = CACHE_DB;
Múltiples servidores web
Si tu sitio MediaWiki es servido por múltiples servidores web, deberías utilizar un servidor de Memcached central. Las instrucciones detalladas están en la página de memcached.
Es importante que no utilices APC como caché principal si tienes múltiples servidores web. Este caché debe coordinarse de forma centralizada para una única instalación de MediaWiki. Hacer que cada servidor web utilice APC como su propia MainCache provocará valores obsoletos, corrupción u otros efectos secundarios inesperados. Ten en cuenta que para los valores que son seguros para almacenar de forma no coordinada (el "caché del servidor local"), MediaWiki automáticamente hace uso de APC independientemente de esta configuración.
Caché interwiki
Los prefijos interwiki de MediaWiki se almacenan en la tabla interwiki de la base de datos.
Véase Interwiki cache para aprender a habilitar este caché.
Caché de localización
Por defecto, las traducciones de los mensajes de la interfaz se almacenan en caché en la tabla l10n_cache de la base de datos. Asegúrate de que $wgCacheDirectory en LocalSettings.php está configurado con una ruta válida para usar el caché local en su lugar. Véase Ayuda:Mensaje del sistema#Almacenamiento en caché para más detalles.
Caché de la barra lateral
Se puede ahorrar un pequeño número de consultas a la base de datos almacenando en caché la barra lateral (deshabilitado por defecto).
Véase $wgEnableSidebarCache y $wgSidebarCacheExpiry.
Caché de visualización de página
El almacenamiento en caché de visualización de página aumenta enormemente el rendimiento para usuarios anónimos (no autenticados). No afecta al rendimiento de los usuarios que han iniciado sesión.
Proxy de memoria caché
Un proxy de caché (o "acelerador HTTP") almacena una copia de las páginas web generadas por tu servidor web. Cuando dicha página se solicita por segunda vez, el proxy entrega su copia local en lugar de reenviar la solicitud al servidor web real.
Esto mejora enormemente los tiempos de respuesta en la carga de páginas para los usuarios finales y también reduce considerablemente la carga computacional en el servidor web de MediaWiki. Cuando se edita una página, MediaWiki puede purgar automáticamente la copia local del proxy de caché.
Ejemplos de proxies de caché:
- Varnish Cache, actualmente (a partir de noviembre de 2018) es utilizado por Wikipedia. Véase también Manual:Varnish caching.
- Nginx's FastCGI module can cache PHP responses; see: Manual:Nginx caching
- Squid, este fue utilizado por Wikipedia antes de 2012.
- mod_cache_disk de Apache, consulta este artículo para instrucciones con MediaWiki.
Caché de archivos
- Consulta Manual:File cache el artículo principal sobre esto.
En ausencia de un proxy de caché o acelerador HTTP, MediaWiki puede utilizar opcionalmente el sistema de archivos para almacenar el resultado de las páginas renderizadas. Para sitios más grandes, es preferible usar un caché externo como Varnish en lugar de la caché de archivos.
Servidor Web
- Si utilizas Apache como servidor web, usa PHP-FPM, no uses el módulo
mod_php. PHP-FPM optimiza la reutilización de procesos PHP.- Cambia Apache para que utilice el módulo de multiprocesamiento basado en eventos (event MPM) en lugar del módulo de multiprocesamiento prebifurcado (prefork MPM).
- Ajusta el archivo robots.txt para impedir que los bots rastreen las páginas de historial. Esto disminuye la carga general del servidor. See Manual:Robots.txt.
- El protocolo HTTP/2 puede ayudar, incluso con ResourceLoader.[1]
Ajustes de configuración
Los sitios grandes que ejecuten MediaWiki 1.6 o posterior deberían establecer $wgJobRunRate a un valor bajo, como por ejemplo 0.01. Véase Manual:Job queue para más información.
Composer
MediaWiki utiliza composer para organizar las dependencias de las bibliotecas.
Por defecto, estas se incluyen desde el directorio /vendor utilizando un autoloader dinámico.
Este autoloader necesita buscar directorios, lo cual puede ser lento.
Se recomienda generar un autoloader estático con Composer, lo que hará que tu wiki responda más rápido.
El uso de un autoloader estático es la opción por defecto para todas las instalaciones de MediaWiki desde la descarga del tarball o desde Git. Si por alguna razón este no es el caso, utiliza el siguiente comando para generar el autoloader estático:
composer update -o --no-dev
Recuerda que esto tendrá que ejecutarse nuevamente después de cada actualización de MediaWiki, ya que incluye una copia estática de las bibliotecas y clases existentes en el software.
Configuración de la base de datos
MySQL
Para una gran carga de escritura concurrente, InnoDB es esencial. Utiliza memcached, no la caché de objetos por defecto basada en MySQL.
Mira abajo para algunos trucos de configuración de BD. También puedes probar y ejecutar el script mysql-tuning-primer para obtener algunas estadísticas y sugerencias rápidas.
Múltiples servidores
El software de la base de datos y el software del servidor web empezarán a pelearse por la RAM en instalaciones de MediaWiki con mucho tráfico que estén alojadas en un único servidor. Si tu wiki tiene un tráfico constante, un paso lógico, una vez que se hayan realizado otras optimizaciones de rendimiento (y la caché sirva la mayor parte del contenido), es colocar la base de datos y el servidor web en servidores separados (o, en algunos casos, en varios servidores separados, comenzando con una réplica). También:
- comprobar que MySQL tiene habilitada la caché de consultas y suficiente memoria;
- asignar la mayor parte de la memoria a innodb_buffer_pool;
- añadir núcleos para MySQL si se satura al máximo en horas punta;
- asignar a memcached aún más RAM para la caché en memoria.
Evaluación comparativa
Algunas herramientas pueden ayudar a evaluar rápidamente los efectos del ajuste de rendimiento.
- http://webpagetest.org ofrece pruebas "en la vida real", controladas desde tu navegador.
- ab es una herramienta de línea de comandos que produce rápidamente algunas estadísticas interesantes.
- PageSpeed
Véase también
- Cambios más exhaustivos, sacrificando algunas funcionalidades
- Para desarrolladores:
- Documentación específica de Wikimedia:
Referencias
- ↑ Niklas Laxström, El rendimiento es una característica, 9 de diciembre de 2013.