Optimización de Páginas en WordPress parte 8

HTTP/3

Habilitar HTTP/3 para Apache

Apache actualmente no cuenta con un módulo HTTP/3 nativo y, por lo tanto, no cuenta con soporte nativo. Apache aún puede aprovechar HTTP/3 si NGINX se configura como proxy inverso una vez que se habilite la compatibilidad con HTTP/3 en NGINX.

Nota: Apache se puede emparejar con el balanceador de carga HAProxy para habilitar la compatibilidad con HTTP/3 en servidores Apache (HAProxy tiene compatibilidad nativa con HTTP/3).

Habilitar HTTP/3 para NGINX

https://codedamn.com/news/backend/leveraging-http3-with-nginx

Breve tutorial sobre cómo habilitar HTTP/3 para NGINX.

Habilitar HTTP/3 para OpenLiteSpeed

https://azdigi.com/blog/en/linux-server-en/web-server/enable-quic-http-3-on-openlitespeed

Artículo sobre cómo habilitar HTTP/3 para OpenLiteSpeed.

HTTP/2 y HTTP/3 Server Push (Gratis)

Plugin gratuito de inserción de servidores

Optimización del rendimiento de SSL (gratis)

Hay varias áreas que se pueden mejorar en la conexión SSL (y la latencia general del tráfico SSL). Algunas de ellas pueden afectar la seguridad, ya sea de forma leve o significativa.

(Éstos son para ssl.conf usando Apache)

Deshabilite la búsqueda de dominio y permita que los no SNI accedan al dominio principal

  • SSLStrictSNIVHostCheck desactivado

En lugar de hosts nombrados, utilice la dirección IP para la entrada VHOST :443

Sesiones SSL en caché

  • Caché de sesión SSL shmcb:/run/httpd/sslcache(512000)
  • Tiempo de espera de caché de sesión SSL 300

Permitir un orden más rápido del protocolo SSL, compatibilidad general, seguridad media:

  • Protocolo SSL todo -SSLv3
  • SSLCipherSuite TODO:+ALTO:+TLSv1:!ADH:!EXP:!SSLv2:!MEDIO:!BAJO:!NULL:!aNULL
  • Orden de cifrado de honor SSL en

Grapado OCSP (acelera SSL)

  • SSLUseStapling activado
  • Tiempo de espera de respuesta de grapado SSL 5
  • Errores de respuesta de retorno de grapado SSL desactivados
  • Caché de grapado SSL shmcb:/run/ocsp(128000)

HSTS (puede realizar una precarga para que las solicitudes http:// se conviertan en solicitudes https:// en el navegador)

  • El encabezado siempre establece Strict-Transport-Security «max-age=63072000; includeSubdomains; preload»

Considere las siguientes implementaciones más avanzadas :

  • HTTP/2 con HPACK
  • Compresión de brotli

Otros problemas no relacionados con SSL que pueden ayudar a acelerar la conexión

Otra directiva para Apache en httpd.conf

  • Búsquedas de nombres de host desactivadas

Ajustes de rendimiento de HAProxy SSL

https://www.suse.com/c/speeding-ssl-need-know-haproxy

Optimizaciones adicionales del rendimiento de SSL

https://www.linkedin.com/advice/0/what-best-ways-optimize-ssl-network-performance-1xfae#:~:text=To%20optimize%20SSL%20netw ork%20rendimiento%2C%20uso%20hardware%20aceleración%2C%20employ%20session,SSL%2FTLS%20terminación%20puntos%20estratégicamente .

  1. Elija el conjunto de cifrado adecuado
  2. Habilitar la reanudación de sesión
  3. Ajustar los parámetros TCP

Hilo de superusuario

https://superuser.com/questions/1066477/how-to-speed-up-ssl-connection-establecimiento

Optimización de la velocidad de conexión SSL de Nginx

Artículo del blog oficial de Nginx

https://www.nginx.com/blog/improve-seo-https-nginx/

Optimización de TTFB/latencia de SSL de Nginx

https://linuxblog.io/nginx-tuning-tips-tls-ssl-https-ttfb-latency/

Hilo de desbordamiento de pila

https://stackoverflow.com/questions/36672261/how-to-reduce-ssl-time-of-website

  1. El almacenamiento en caché SSL debe estar activado
  1. HTTP Keep-Alive debe estar activado para que la conexión no se interrumpa después de cada solicitud HTTP
  1. Utilice la versión más reciente de TLS
  1. El grapado de OCSP ahorra el viaje a la red para verificar que el certificado sea válido, mediante OCSP o CRL
  1. Cadena de certificados. Necesitará una cadena de certificados corta (idealmente, de 3 certificados): su servidor, el intermediario y el certificado raíz de la CA.
  1. Cifrados utilizados. Hay cifrados antiguos y más lentos, y otros más rápidos y nuevos. Esto puede complicarse rápidamente, pero generalmente debería buscar cifrados ECDHE para la mayoría de los clientes (y preferiblemente ECDHE…GCM) y especificar que se use el orden del servidor para poder elegir el cifrado utilizado en lugar del cliente.

Reducir el tiempo de protocolo de enlace TLS

Artículo de Raaz Kumar

https://raazkumar.com/tutorials/nginx/improve-ssl-rendimiento

Tutorial de optimización de sobrecarga de SSL de Baeldung

https://www.baeldung.com/cs/ssl-overhead-causes-countermeasures

Precarga de SSL HSTS

https://hstspreload.org

PRECAUCIÓN: Si su sitio no tiene un certificado SSL válido después de agregarlo a la lista de precarga, DEBE tener un certificado SSL válido para seguir siendo accesible. Un sitio será inaccesible si no tiene un certificado SSL válido.

Requisitos de presentación

Si un sitio envía la directiva de precarga en un encabezado HSTS, se considera que solicita inclusión en la lista de precarga y puede enviarse a través del formulario de este sitio.

Para ser aceptado en la lista de precarga de HSTS a través de este formulario, su sitio debe cumplir el siguiente conjunto de requisitos:

  • Entregar un certificado válido.
  • Redirigir de HTTP a HTTPS en el mismo host, si está escuchando en el puerto 80.
  • Servir todos los subdominios a través de HTTPS.
  • En particular, debe admitir HTTPS para el subdominio www si existe un registro DNS para ese subdominio.
  • Nota: La precarga de HSTS se aplica a todos los subdominios, incluidos los subdominios internos que no son accesibles públicamente.
  • Sirva un encabezado HSTS en el dominio base para solicitudes HTTPS:
  • La edad máxima debe ser al menos 31536000 segundos (1 año).
  • Se debe especificar la directiva includeSubDomains.
  • Se debe especificar la directiva de precarga.
  • Si está ofreciendo una redirección adicional desde su sitio HTTPS, esa redirección aún debe tener el encabezado HSTS (en lugar de la página a la que redirige).

Configuración de PHP (gratuita)

Si PHP 8 no presenta incompatibilidades con los plugins que usa, debería usar la versión 8-8.3. Use siempre la versión más actualizada de PHP. Utilice también la versión más reciente de MariaDB o MySQL.

El tiempo de ejecución de PHP debe aumentarse a 300 segundos, el tiempo de entrada a 300 segundos, las variables de entrada a 20 000 y el límite de memoria debe establecerse entre 256 MB y 768 MB de RAM. No se recomienda asignar toda la RAM asignada a su VPS, ya que esto podría causar problemas de rendimiento o el bloqueo del servidor.

Habilitar la compresión de salida Zlib en PHP.ini

Caché de operaciones de PHP

Aumente la memoria caché de OP a al menos 512 MB, preferiblemente a 1024 o 2048 si su servidor tiene más RAM. El límite máximo de archivos acelerados debe aumentarse tanto como lo permitan los recursos de su servidor (el límite es de 100 000).

Mover los datos de la sesión PHP a /dev/shm para mejorar el rendimiento

¡Comprime tu sitio de WordPress moviendo los datos de sesión de PHP a /dev/shm! Esto te proporcionará velocidades de carga más rápidas y una excelente experiencia de usuario. Aquí te explicamos cómo:

  1. Busque el archivo php.ini en el directorio /etc.
  2. Edite el archivo con un editor de texto.
  3. Busque la línea que comienza con «session.save_path».
  4. Reemplace el valor actual con «/dev/shm».

Mejora del rendimiento: Al mover los datos de sesión de PHP a /dev/shm, se almacenan en RAM. Esto puede acelerar significativamente las operaciones de lectura y escritura de datos de sesión, lo cual puede ser beneficioso para sitios de WordPress con mucho tráfico y uso intensivo de sesiones.

Consideraciones y compensaciones:

Uso de RAM

Dado que /dev/shm usa RAM, es importante asegurarse de que el servidor tenga suficiente memoria. Almacenar datos de sesión en RAM consumirá más memoria, lo que podría ser un problema si el servidor ya tiene limitaciones de memoria.

Persistencia

Los datos almacenados en /dev/shm son temporales y se perderán al reiniciar. Esto suele ser adecuado para los datos de sesión, que son temporales por naturaleza, pero es algo que hay que tener en cuenta.

Escalabilidad

Si su sitio de WordPress se gestiona desde varios servidores en un entorno con equilibrio de carga, este enfoque puede no ser adecuado a menos que tenga una forma de compartir datos de sesión entre servidores.

Seguridad

Asegúrese de que su partición /dev/shm esté protegida adecuadamente, ya que almacenar datos de sesión en un espacio de memoria compartida puede tener implicaciones de seguridad.

Extender la vida útil de PHP aumentando la configuración de “Tiempo máximo de inactividad”

Localice el archivo de configuración de PHP (php.ini). Edítelo y modifique el parámetro «maxIdleTime». Aumente su valor para que PHP tenga un tiempo de inactividad mayor. Tras actualizar el valor de «maxIdleTime», guarde los cambios y aplíquelos al servidor.

Rendimiento de la prueba

Monitorea el rendimiento del sitio web tras extender la vida útil de PHP. Comprueba si los tiempos de respuesta y el rendimiento del sitio son mejores.

Mejore el rendimiento del frontend con solo una línea de PHP

https://www.spacedmonkey.com/2023/06/29/improve-front-end-dance-with-just-one-line-of-php

Caché de StashPHP

https://www.stashphp.com

WP Stash (Gratis)

https://github.com/inpsyde/WP-Stash

https://inpsyde.com/en/wordpress-caching-system-wpstash

Administrador de OPCache (gratis)

Estadísticas y gestión de OPcache directamente en el panel de administración de WordPress.

Cree múltiples procesos PHP asincrónicos para acelerar el tiempo de procesamiento

Artículo de Torque Mag

Optimizaciones de rendimiento de MySQL (gratis)

Reducir los datos cargados automáticamente

La mayoría de los complementos configuran muchas de las opciones de su base de datos para que se carguen automáticamente en todo momento, lo que perjudica su rendimiento y, además, consume más recursos del servidor. Reducir al máximo los datos cargados automáticamente sin afectar la funcionalidad mejorará el rendimiento de su base de datos.

Pruebe a deshabilitar cualquier opción de base de datos en un servidor de pruebas, ya que esto podría afectar su sitio durante la optimización y las pruebas. Siempre pruebe en un servidor de pruebas al modificar las opciones de carga automática de la base de datos.

Limpiador de bases de datos avanzado (gratuito y profesional)

Muchos plugins de optimización de bases de datos pueden modificar las opciones de carga automática. Yo uso el plugin Advanced Database Cleaner, pero hay muchas opciones disponibles.

Limpiador de bases de datos (gratis)

Otra opción gratuita para administrar el estado de carga automática de las opciones de la base de datos.

Ajuste automático de la base de datos

Sintonizador de MySQL (gratuito)

https://github.com/major/MySQLTuner-perl

MySQLTuner es un script escrito en Perl que permite revisar y evaluar rápidamente una instalación de MySQL y realizar ajustes para mejorar el rendimiento y la estabilidad. Las variables de configuración actuales y los datos de estado se recuperan y presentan de forma breve, junto con algunas sugerencias básicas de rendimiento.

Releem (Pagado)

https://releem.com

Releem es un servicio de optimización MySQL de pago que ajusta dinámicamente la configuración de MySQL para que coincida con los recursos del servidor y establece los valores correspondientes. Mide activamente la carga de la base de datos y ajusta la configuración en consecuencia. MySQL Tuner no monitoriza ni ajusta dinámicamente la configuración en función de la carga de la base de datos, como sí lo hace Releem.

Habilitar la caché de consultas MySQL

https://mariadb.com/kb/en/query-cache

https://www.freecodecamp.org/news/the-ultimate-guide-to-high-performance-wordpress

(Ctrl+f para caché de consultas en la página de código gratuito)

Establecer límites de tamaño de tabla en memoria

Establecer límites de tamaño de tabla en memoria: Las consultas complejas harán que el servidor SQL cree tablas temporales. El servidor SQL intentará crear tablas en memoria hasta un tamaño determinado para mejorar el rendimiento. Es importante establecer el tamaño máximo en un valor adecuado para evitar la creación de tablas temporales en disco.

Las variables que controlan este comportamiento son tmp_table_size y max_heap_table_size. Puede comparar el número de tablas temporales internas en disco creadas con el número total de tablas temporales internas creadas comparando los valores de Created_tmp_disk_tables y Created_tmp_tables.

Establecer el tamaño del grupo de búfer

https://www.freecodecamp.org/news/the-ultimate-guide-to-high-performance-wordpress

El grupo de búferes es el área de memoria que MariaDB utiliza para almacenar en caché datos e índices. Es importante configurar el tamaño del grupo de búferes adecuadamente según la cantidad de memoria disponible y el tamaño de la base de datos. Una buena regla general es establecer el tamaño del grupo de búferes en aproximadamente el 40 % de la memoria disponible, pero tenga en cuenta que este porcentaje suele aplicarse solo en servidores de bases de datos independientes. El tamaño del grupo de búferes se puede controlar mediante la variable innodb_buffer_pool_size. Consulte https://mariadb.com/kb/en/innodb-buffer-pool/ para obtener más información.

Una forma de analizar el rendimiento del pool de búferes es observar la variable de estado innodb_buffer_pool_wait_free. Si aumenta, significa que no hay suficiente pool de búferes (o que el vaciado no se realiza con la frecuencia suficiente). En este caso, debería establecer la variable innodb_buffer_pool_size en un valor mayor si los recursos de su sistema lo permiten.

Consulte estos enlaces para obtener más información:

https://mariadb.com/kb/en/server-system-variables/#tmp_table_size

https://mariadb.com/kb/en/server-system-variables/#max_heap_table_size

Optimización manual y recursos de aprendizaje

https://www.percona.com/blog/mysql-101-parameters-to-tune-for-mysql-performance

https://dev.mysql.com/doc/refman/8.0/en/optimization.html

https://www.turing.com/kb/best-practices-for-mysql-rendimiento-tuning

https://www.infoworld.com/article/3675552/10-more-essential-mysql-performance-tuning-tips.html

https://tecadmin.net/mysql-rendimiento-tuning-tips

https://dev.mysql.com/doc/mysql-perfschema-excerpt/8.0/en/rendimiento-schema.html

https://phoenixnap.com/kb/improve-mysql-rendimiento-tuning-optimización

https://medium.com/releem/optimizing-mysql-for-peak-performance-a-comprehensive-guide-881ba1ad3ee1

Construyendo el mejor ÍNDICE para un SELECT determinado

https://mysql.rjweb.org/doc.php/index_cookbook_mysql

Tienes una función SELECT y quieres crear el mejor ÍNDICE para ella. Este blog es un «receta» que te explica cómo hacerlo.

Cómo solucionar consultas MySQL lentas

https://www.kevinleary.net/blog/fixing-slow-queries-wordpress-database

Tablas de particionamiento

La partición de tablas divide tablas grandes en partes más pequeñas y manejables, lo que facilita la consulta y la gestión de datos. Esto puede mejorar el rendimiento de las consultas al reducir la cantidad de datos analizados durante ellas.

Partición por rango/lista/hash/clave

Puede particionar tablas por rango, lista, hash o clave, según sus datos y patrones de consulta. Por ejemplo, particionar por rango de fechas puede ser útil para tablas que almacenan datos históricos.

Índices en particiones

Asegúrese de que cada partición esté indexada correctamente para maximizar las ganancias de rendimiento.

La partición puede reducir significativamente los tiempos de consulta para tablas grandes al limitar la cantidad de datos que deben escanearse.

Tablas temporales y tablas de memoria

Las tablas temporales y de memoria se pueden usar para cálculos intermedios o para almacenar datos transitorios que no requieren persistencia en disco. Las tablas de memoria, en particular, se almacenan en la RAM y son muy rápidas.

Motor de memoria

Utilice el motor de almacenamiento MEMORIA para tablas que almacenan pequeñas cantidades de datos de acceso frecuente. Estas tablas residen en memoria, lo que permite un acceso muy rápido.

Tablas temporales

Utilice tablas temporales para consultas complejas que requieren varios pasos. Las tablas temporales se crean sobre la marcha y se eliminan al finalizar la sesión, lo que reduce la necesidad de consultar repetidamente los mismos datos.

Estas técnicas pueden descargar operaciones complejas de sus tablas principales y acelerar el procesamiento de consultas.

Leer réplicas

Configure réplicas de lectura de MySQL para manejar consultas de solo lectura, lo que puede reducir la carga en su servidor de base de datos principal.

Documentación oficial de MySQL

https://dev.mysql.com/doc/refman/8.4/en/replication-solutions-rendimiento.html

Explicación de la replicación

https://dev.mysql.com/doc/refman/8.4/en/replication.html

Artículo de PlanetScale

https://planetscale.com/blog/what-is-mysql-replication-and-when-should-you-use-it

Artículo mediano

https://medium.com/@truongbui95/scaling-sql-read-operatives- Effective-strategies-and-detailed-examples-9b590da68819

Artículo sólido con ejemplos de configuración.

Investigación adicional

Los chatbots de IA pueden transmitir una gran cantidad de información sobre el tema de las réplicas de lectura y también ayudar con la implementación.

Procesamiento asincrónico para operaciones de lectura

Artículo mediano

https://medium.com/@denisanikin/procesamiento-asincrónico-con-bases-de-datos-en-memoria-o-cómo-manejar-un-millón-de-transacciones-por-36a4c01fc4e4

Tarantool (Gratis)

https://www.tarantool.io/en/doc/latest/platform/ddl_dml/sql/improving_mysql

Tarantool es una forma interesante de mejorar el rendimiento de MySQL y también ayuda con el rendimiento de escalamiento de la base de datos.

Conector MySQL para Tarantool

https://github.com/tarantool/mysql

Fragmentación de bases de datos

Divida sus datos en varias bases de datos (fragmentos) según una clave de fragmento. Esto puede reducir el tamaño de cada base de datos, agilizando las consultas y reduciendo la carga en cualquier servidor.

Estos enfoques permiten el escalamiento horizontal, lo cual es esencial para gestionar grandes cantidades de tráfico y datos.

Artículo de PlanetScale

https://planetscale.com/blog/how-to-scale-your-database-and-when-to-shard-mysql

Vitess (Gratis)

https://github.com/vitessio/vitess

https://vitess.io

Vitess es un sistema de agrupamiento de bases de datos para el escalamiento horizontal de MySQL a través de fragmentación generalizada.

Al encapsular la lógica de enrutamiento de fragmentos, Vitess permite que el código de la aplicación y las consultas a la base de datos sean independientes de la distribución de datos en múltiples fragmentos. Con Vitess, incluso puede dividir y fusionar fragmentos a medida que aumentan sus necesidades, con una transición rápida que solo toma unos segundos.

Hoja de referencia de rendimiento de MySQL

División de instancias del grupo de búfer de InnoDB

Artículo de Percona

https://www.percona.com/blog/how-many-innodb_buffer_pool_instances-do-you-need-in-mysql-8

Si tiene una carga de trabajo alta y un sistema multinúcleo, considere dividir el pool de búfer de InnoDB en varias instancias. Esto puede ayudar a reducir la contención de las estructuras de memoria dentro de InnoDB. Para ello, ajuste el parámetro innodb_buffer_pool_instances según los núcleos y la carga de trabajo de su sistema.

Ajuste del tamaño del archivo de registro de InnoDB

Releem Artículo

https://releem.com/docs/mysql-performance-tuning/innodb_log_file_size

El tamaño de los archivos de registro de InnoDB (innodb_log_file_size) tiene un impacto significativo en el rendimiento. Un tamaño mayor de los archivos de registro puede reducir la E/S del disco en cargas de trabajo con escritura intensiva, pero podría aumentar el tiempo de recuperación tras un fallo. Equilibrar el tamaño de los archivos de registro según la naturaleza de la carga de trabajo puede mejorar el rendimiento.

Utilización del grupo de subprocesos

Para servidores que gestionan muchas conexiones y consultas, usar un grupo de subprocesos puede mejorar el rendimiento. En lugar de un subproceso por conexión, MySQL puede gestionar un grupo de subprocesos y gestionar numerosas conexiones de forma eficiente.

Optimizar los búferes de unión

Releem Artículo

https://releem.com/docs/mysql-performance-tuning/join_buffer_size

Cuando MySQL realiza uniones, utiliza un búfer de unión. El tamaño de este búfer (join_buffer_size) determina la cantidad de datos que MySQL puede procesar simultáneamente durante una operación de unión. Aumentar el tamaño del búfer de unión puede mejorar el rendimiento de las uniones no indexadas.

Manual de referencia de MySQL

https://dev.mysql.com/doc/refman/8.0/en/buffering-caching.html

Tamaño y uso de la caché de consultas

Manual de referencia de caché de consultas MySQL

https://dev.mysql.com/doc/refman/5.7/en/query-cache.html

En las versiones de MySQL donde aún se admite la caché de consultas, dimensionarla correctamente (query_cache_size) y configurarla puede mejorar el rendimiento en cargas de trabajo con gran volumen de lectura. Sin embargo, tenga en cuenta que la caché de consultas está obsoleta en versiones posteriores de MySQL y se eliminó en MySQL 8.0.

Ajuste fino de los buffers de ordenación y lectura

Artículo sobre el tamaño del búfer de ordenación de Releem

https://releem.com/docs/mysql-performance-tuning/sort_buffer_size

MySQL utiliza búferes de ordenación (sort_buffer_size) y de lectura (read_buffer_size) durante diversas operaciones. Ajustar estos búferes puede mejorar el rendimiento, especialmente en operaciones complejas de ordenación y lectura.

Compresión MySQL

Artículo del manual de referencia de MySQL

https://dev.mysql.com/doc/refman/8.0/en/innodb-page-compression.html

Para tablas con grandes cantidades de texto o datos blob, considere usar las capacidades de compresión de MySQL para reducir el espacio en disco y mejorar la eficiencia de E/S.

Uso de índices de cobertura

Artículo de Toadworld

Los índices de cobertura incluyen todos los campos requeridos por una consulta. Pueden mejorar drásticamente el rendimiento de las consultas, ya que la base de datos puede recuperar todos los datos necesarios del índice sin acceder a los datos de la tabla.

Optimización de subconsultas

Artículo del Manual de referencia de MySQL

https://dev.mysql.com/doc/refman/8.0/en/subquery-optimization.html

Artículo del tutorial de MySQL

En MySQL, las subconsultas a veces pueden ser ineficientes. Reescribir las consultas para evitarlas o transformarlas en uniones puede mejorar el rendimiento.

Particionar tablas grandes

Artículo de Sling Academy

https://www.slingacademy.com/article/table-partitioning-in-mysql-8-a-practical-guide

Para tablas muy grandes, considere usar particionamiento de tablas. Esto divide una tabla en partes y puede mejorar el rendimiento de las consultas, especialmente las basadas en rangos.

Artículo de Data Geek Lab

Optimización de tablas temporales e intercambios de discos

Artículo del Manual de referencia de MySQL

https://dev.mysql.com/doc/refman/8.0/en/optimize-table.html

Vigile el uso de tablas temporales basadas en disco. Si es posible, ajuste su servidor para que la mayoría de las tablas temporales se creen en memoria (tmp_table_size y max_heap_table_size).

Deshabilitar el esquema de rendimiento

Artículo del manual de referencia de MySQL

https://dev.mysql.com/doc/refman/8.0/en/rendimiento-schema-startup-configuration.html

Si no utiliza el esquema de rendimiento de MySQL, considere deshabilitarlo para ahorrar recursos. Esto es especialmente útil para sistemas con recursos limitados.

Confirmación del grupo de registro binario

Artículo del Manual de referencia de MySQL

https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html

Para las configuraciones de replicación, optimizar la configuración de confirmación del grupo de registro binario puede reducir significativamente el retraso de replicación y mejorar el rendimiento general del servidor maestro.

Grupos de recursos para el ajuste de prioridades

Artículo del Manual de referencia de MySQL sobre optimización del grupo de recursos

https://dev.mysql.com/doc/refman/8.0/en/resource-groups.html

Utilice la función Grupos de recursos de MySQL 8.0 para asignar consultas de alta prioridad a procesadores o núcleos de procesador específicos, lo que mejora el rendimiento de las consultas críticas.

Artículo sobre optimización del rendimiento de MySQL en el blog de Linux

https://docs.informatica.com/data-engineering/common-content-for-data-engineering/10-2-2/performance-tuning-guide/preface.html

Artículo muy extenso con algunas estrategias de optimización únicas.

Análisis de optimización de consultas de bases de datos

Mejore el rendimiento de las consultas de WP al usar la caché de objetos externos

https://www.spacedmonkey.com/2023/01/17/improve-wp_query-performance-if-using-external-object-cache

Redash (Gratis)

https://github.com/getredash/redash

Los usuarios de SQL utilizan Redash para explorar, consultar, visualizar y compartir datos de cualquier fuente. Su trabajo, a su vez, permite que cualquier persona de su organización utilice los datos. Redash admite más de 35 fuentes de datos SQL y NoSQL. También se puede ampliar para admitir más.

  • Basado en navegador : todo en su navegador, con una URL para compartir.
  • Facilidad de uso : sea inmediatamente productivo con los datos sin la necesidad de dominar un software complejo.
  • Editor de consultas : redacte rápidamente consultas SQL y NoSQL con un explorador de esquemas y autocompletado.
  • Visualización y paneles : cree hermosas visualizaciones con solo arrastrar y soltar, y combínelas en un solo panel.
  • Compartir : colabore fácilmente compartiendo visualizaciones y sus consultas asociadas, lo que permite la revisión por pares de informes y consultas.
  • Actualizaciones programadas : actualice automáticamente sus gráficos y paneles a intervalos regulares que usted defina.
  • Alertas : define condiciones y recibe alertas instantáneas cuando tus datos cambien.
  • API REST : Todo lo que se puede hacer en la interfaz de usuario también está disponible a través de la API REST.
  • Amplio soporte para fuentes de datos : API de fuente de datos extensible con soporte nativo para una larga lista de bases de datos y plataformas comunes.

Vientos solares

Analizador de rendimiento de bases de datos (de pago)

https://www.solarwinds.com/database-performance-analyzer

Analizar el rendimiento de SQL Server y de las consultas, identificar problemas y brindar asesoramiento sobre optimización y ajuste.

SQL Sentry (de pago)

https://www.solarwinds.com/sql-sentry

Supervisión del rendimiento de bases de datos de SQL Server y Azure SQL, con análisis rápido de la causa raíz y visibilidad en todo el patrimonio de datos

Observabilidad de bases de datos (de pago)

https://www.solarwinds.com/solutions/solarwinds-observability/database-observability

Visualizar la salud de la base de datos

Explorador de planes (gratis)

https://www.solarwinds.com/free-tools/plan-explorer

Llegue rápidamente a la raíz de los problemas de consultas con una herramienta de análisis de consultas gratuita

Barniz (Gratis)

Mi configuración personalizada de Varnish VCL

https://github.com/jazir555/Varnish-VCL-Config

Complete los marcadores de posición con la información de su sitio y actualice su archivo de configuración Varnish Default.vcl actual.

Ejemplos de configuración

https://gist.github.com/fevangelou/84d2ce05896cab5f730a

Impresionante barniz

https://github.com/huayra/awesome-varnish

Aumente su tasa de aciertos en caché de barniz

https://varnish-cache.org/docs/trunk/users-guide/increasing-your-hitrate.html

Artículo mediano

https://nbeguier.medium.com/3-consejos-para-aumentar-el-rendimiento-de-su-cache-de-barniz-3f4ce44be3c1

Almacenamiento en caché fragmentado

Resolución dinámica de backend

Solicitudes Ajax en caché

Reunión de barniz

https://github.com/varnish/varnishgather

Varnish Gather es un script simple diseñado para recopilar la mayor cantidad de información relevante posible en una configuración de Varnish Cache.

Módulos de barniz adicionales

https://github.com/varnish/varnish-modules

Esta es una colección de módulos («vmods») que extienden Varnish VCL y se utilizan para describir políticas de solicitud/respuesta HTTP con capacidades adicionales.

Compresión de texto Gzip, Brotli y Zstandard (gratuita)

La compresión Gzip, Brotli y Zstandard son métodos de compresión de texto que funcionan a nivel de servidor web . Esto significa que necesita compatibilidad con la compresión Gzip/Brotli/Zstandard habilitada a través de NGINX, Apache o LiteSpeed y configurarlas correctamente para que muestren contenido comprimido.

Artículo sobre interruptores rojos

https://www.redswitches.com/blog/brotli-vs-gzip

Fantástico artículo en profundidad que explica los métodos de compresión Brotli y Gzip.

Artículos de WP Rocket

Niveles de compresión de Gzip, Brotli y Zstandard

Los artículos anteriores ofrecen una buena explicación de los niveles de compresión, sus beneficios, los posibles inconvenientes de aumentarlos, etc. Sin embargo, la explicación rápida es que niveles de compresión más altos producen archivos más pequeños, pero aumentan el tiempo de procesamiento del servidor. Aumentar los niveles de compresión tiene rendimientos decrecientes, y se necesita un servidor potente para usar el nivel máximo de compresión para Brotli y Gzip.

El nivel de compresión predeterminado para Brotli y Gzip debería ser 6. Los niveles más altos son mejores hasta cierto punto. Un nivel muy alto de compresión de gzip y brotli puede perjudicar el rendimiento y afectar la velocidad de la página, por lo que se recomienda realizar pruebas de velocidad después de ajustar estas opciones de configuración para medir su impacto en el rendimiento y determinar si se necesitan ajustes adicionales.

Recomiendo aumentar el nivel poco a poco hasta llegar al punto en el que vea una pérdida de rendimiento en lugar de un beneficio en las pruebas.

Cómo habilitar Brotli o Gzip para Apache

WP Rocket tiene una sección en este artículo sobre cómo implementar la compresión Gzip/Brotli a través de .htaccess solo para Apache

Cómo habilitar Brotli con respaldo Gzip en NGINX

Compresión Zstandard

Artículo sobre compresión Gzip, Brotli y Zstandard

https://paulcalvano.com/2024-03-19-choosing-between-gzip-brotli-and-zstandard-compression/#:~:text=Brotli%20level%205%20generalmente%20result,faster%20than%20gzip%20and%20Brotli .

Si bien la compresión Zstandard es el mejor y más rápido algoritmo de compresión de los tres, actualmente solo es compatible con Chrome a partir de mayo de 2024. Firefox y otros navegadores pronto agregarán soporte para la compresión Zstandard; actualmente, el soporte para la compresión Zstandard se encuentra en prueba beta para Firefox.

Sin embargo, debido a lo nuevo que es Zstandard, cuando se implementa, siempre se debe tener una alternativa configurada para servir contenido comprimido con Gzip/Brotli a navegadores que no admiten la compresión Zstandard (cualquier dispositivo con un navegador más antiguo, es decir, la mayoría de los navegadores en los dispositivos del usuario).

Módulo experimental NGINX Zstandard

https://github.com/tokers/zstd-nginx-module

Equilibrio de carga

Haproxy (Gratis)

Almacenamiento en caché de HAProxy

Artículo de LoadForge

https://loadforge.com/guides/advanced-haproxy-caching-strategies

Excelente artículo sobre cómo configurar el almacenamiento en caché de HAProxy, así como estrategias avanzadas de configuración de almacenamiento en caché.

Artículo oficial de HAProxy

https://www.haproxy.com/blog/acelerar-tus-apis-by-using-the-haproxy-cache

Artículo sobre el almacenamiento en caché de HAProxy directamente del blog de HAProxy.

Recursos

https://www.digitalocean.com/community/tutorials/an-introduction-to-haproxy-and-load-balancing-concepts

https://www.cloudbees.com/blog/rendimiento-tuning-haproxy

https://medium.com/@pawilon/tuning-your-linux-kernel-and-haproxy-instance-for-high-loads-1a2105ea553e

https://delta.blue/blog/haproxy-timeouts

https://www.papertrail.com/solution/tips/haproxy-logging-how-to-tune-timeouts-for-performance

https://www.freecodecamp.org/news/how-we-fine-tuned-haproxy-to-achieve-2-000-000-concurrent-ssl-connections-d017e61a4d27

https://www.suse.com/c/speeding-ssl-need-know-haproxy

Recomendaciones de configuración/Qué evitar

Roxy WI

https://roxy-wi.org

Interfaz gráfica de usuario (GUI) para la configuración automática de HAProxy y otras infraestructuras de servidores. Disponible en versiones gratuita y de pago.

Configuraciones de HAProxy predefinidas

https://github.com/HariSekhon/HAProxy-configs

MPTCP

https://www.multipath-tcp.org

(Más información próximamente)

Artículo de Red Hat

https://www.redhat.com/en/blog/understanding-multipath-tcp-networking-highway-future

Pila de alojamiento de AWS

Artículo de Ars Technica

https://arstechnica.com/information-technology/2023/07/ars-on-aws-01

Balanceo de carga elástico (de pago)

https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html

Elastic Load Balancing distribuye automáticamente el tráfico entrante entre múltiples destinos, como instancias EC2, contenedores y direcciones IP, en una o más zonas de disponibilidad. Supervisa el estado de los destinos registrados y dirige el tráfico únicamente a los destinos en buen estado. Elastic Load Balancing escala el balanceador de carga a medida que el tráfico entrante cambia con el tiempo. Puede escalar automáticamente a la gran mayoría de las cargas de trabajo.

Elastic Load Balancing es compatible con los siguientes balanceadores de carga: de aplicaciones, de red, de puerta de enlace y clásicos. Puede seleccionar el tipo de balanceador que mejor se adapte a sus necesidades.

AWS Fargate (de pago)

https://aws.amazon.com/fargate

AWS Fargate es un motor de cómputo sin servidor y de pago por uso que le permite concentrarse en crear aplicaciones sin administrar servidores.

AWS Lambda (de pago)

https://aws.amazon.com/lambda

AWS Lambda es un servicio computacional que ejecuta su código en respuesta a eventos y administra automáticamente los recursos computacionales (escalamiento automático), lo que lo convierte en la forma más rápida de convertir una idea en una aplicación moderna, de producción y sin servidor.

Amazon Aurora (Pago)

https://aws.amazon.com/rds/aurora

Amazon Aurora ofrece un alto rendimiento y una disponibilidad sin precedentes a escala global, con compatibilidad total con MySQL y PostgreSQL, a una décima parte del costo de las bases de datos comerciales. Aurora tiene un rendimiento 5 veces superior al de MySQL y 3 veces superior al de PostgreSQL.

Sistema de archivos elásticos de Amazon (de pago)

https://aws.amazon.com/efs

Almacenamiento de archivos totalmente elástico y sin servidor. Amazon Elastic File System (Amazon EFS) crece y se reduce automáticamente a medida que se añaden y eliminan archivos, sin necesidad de administración ni aprovisionamiento.

Servicio de contenedores elásticos de Amazon (de pago)

https://aws.amazon.com/ecs

Amazon Elastic Container Service (ECS) es un servicio de orquestación de contenedores completamente administrado que lo ayuda a implementar, administrar y escalar aplicaciones en contenedores de manera más eficiente.

Amazon OpenSearch (de pago)

https://aws.amazon.com/opensearch-service

Amazon OpenSearch Service facilita el análisis interactivo de registros, la monitorización de aplicaciones en tiempo real, la búsqueda en sitios web y mucho más. OpenSearch es una suite de búsqueda y análisis distribuida de código abierto derivada de Elasticsearch. Amazon OpenSearch Service ofrece las últimas versiones de OpenSearch, compatibilidad con 19 versiones de Elasticsearch (de la 1.5 a la 7.10), así como funciones de visualización basadas en OpenSearch Dashboards y Kibana (de la 1.5 a la 7.10).

Amazon ElastiCache (de pago)

https://aws.amazon.com/elasticache

Amazon ElastiCache es un servicio totalmente administrado, compatible con Redis y Memcached, que ofrece un rendimiento en tiempo real y rentable, y una alta disponibilidad de hasta el 99,99 % para aplicaciones modernas. ElastiCache es ideal para casos de uso de alto rendimiento, como almacenamiento en caché de datos, aplicaciones web, móviles, sanitarias y financieras, juegos, tecnología publicitaria, IoT, streaming multimedia, almacenes de sesiones, tablas de clasificación, aprendizaje automático (ML) y aplicaciones basadas en microservicios.

ElastiCache acelera el rendimiento de bases de datos y aplicaciones, escalando a cientos de millones de operaciones por segundo con tiempos de respuesta de microsegundos. Entre sus ventajas se incluyen mayor seguridad, fiabilidad, escalabilidad y rendimiento en comparación con alternativas de código abierto. También permite ahorrar costes en cargas de trabajo con uso intensivo de memoria y ofrece funciones de optimización de costes, como la organización de datos en niveles para cargas de trabajo con uso intensivo de memoria.

Con Amazon ElastiCache Serverless, puede crear una caché de alta disponibilidad en menos de un minuto, sin necesidad de aprovisionar ni configurar la infraestructura. Puede crear una caché de ElastiCache Serverless en pocos pasos especificando un nombre de caché en la Consola de administración de AWS, el Kit de desarrollo de software (SDK) de AWS o la Interfaz de línea de comandos (CLI) de AWS.

Optimizaciones de VPS (gratis)

Optimización de Linux

Deshabilitar THP

ADM sintonizado

https://manpages.ubuntu.com/manpages/jammy/man7/tuned-profiles.7.html

Cambiar el nivel de inicialización a 3

Establezca el nivel de inicialización en 3 si el valor predeterminado es 5. Use el comando «init 3» para establecer el nivel de inicialización en 3 y luego reinicie para que los cambios surtan efecto. Puede hacer clic en el enlace a continuación para obtener instrucciones sobre cómo hacerlo.

https://www.cyberciti.biz/howto/question/linux/changing-run-levels-3-5.php

Más información sobre esto aquí

Este enlace explica cómo hacer lo contrario, cambiando de 5 a 3 si el comando «init 3» no funciona. Si su nivel de ejecución está configurado en 5, cámbielo a 3.

Optimización de Github para Linux

https://github.com/sn99/Optimizing-linux

Excelente repositorio sobre cómo optimizar el rendimiento de Linux.

Stacer

https://www.site24x7.com/learn/linux/linux-rendimiento-optimización.html

Stacer es una herramienta para optimizar Linux que elimina la caché no deseada y ordena los procesos analizando el uso de memoria y CPU. Stacer revela el rendimiento de los servicios y procesos, y qué usuario los ejecuta.

Herramientas y técnicas de optimización del rendimiento

https://linuxconfig.org/linux-rendimiento-optimización-herramientas-y-tecnicas

Habilitar Z-Swap

https://blog.jacobstoner.com/zswap-improve-memory-performance-on-linux

sudo perl -pi -e ‘s/^(GRUB_CMDLINE_LINUX_DEFAULT.*)»$/$1 zswap.enabled=1

zswap.compressor=lz4 zswap.zpool=z3fold zswap.max_pool_percent=25″/’ /etc/default/grub

sudo update-grub

sudo echo -e ‘lz4\nlz4_compress\nz3fold’ >> /etc/initramfs-tools/modules

sudo update-initramfs -u

sudo reboot

Ajuste el sistema de archivos de Linux para un mayor rendimiento

Artículo de Foss Linux

https://www.fosslinux.com/111937/consejos-y-trucos-para-optimizar-linux-device-rendimiento.htm

Nivel semisuperficial, pero con información ligeramente diferente a la del artículo de linux.com. Es mejor utilizar ambas técnicas enumeradas juntas.

Utilice un kernel personalizado

https://www.fosslinux.com/111937/consejos-y-trucos-para-optimizar-linux-device-rendimiento.htm

Deshabilitar servicios innecesarios de Linux

Para enumerar todos los servicios, puede utilizar este comando:

systemctl lista-unidad-archivos –tipo=servicio

Luego, para deshabilitar un servicio, utilice:

sudo systemctl deshabilitar NOMBRE_DE_SERVICIO

Marcos gigantes

Habilitación de tramas gigantes:

  • Compruebe si su adaptador de red admite tramas gigantes: ethtool eth0
  • Habilite las tramas gigantes configurando una MTU (unidad máxima de transmisión) más grande, normalmente 9000 bytes para Ethernet: ifconfig eth0 mtu 9000 o ip link set dev eth0 mtu 9000
  • Verifique los cambios: ifconfig eth0 o ip addr show eth0
  • Recuerde configurar Jumbo Frames en todos los dispositivos de su red para evitar la fragmentación de paquetes.

Las tramas jumbo pueden ayudar a reducir la carga de la CPU al disminuir la cantidad de paquetes procesados, pero es fundamental garantizar que todos los equipos de red las admitan para evitar posibles problemas de red. Contacte con su proveedor de alojamiento para asegurarse de que esta función esté disponible.

TCP BBR

Aumente la velocidad de Internet en Linux con el control de congestión TCP BBR

https://www.cyberciti.biz/cloud-computing/increase-your-linux-server-internet-speed-with-tcp-bbr-congestion-control

https://www.techrepublic.com/article/how-to-enable-tcp-bbr-to-improve-network-speed-on-linux/

https://github.com/systemd/systemd/issues/9725#issuecomment-413369212

https://djangocas.dev/blog/huge-improve-network-performance-by-change-tcp-congestion-control-to-bbr

Parámetros de rendimiento de la red Linux

https://github.com/leandromoreira/linux-network-rendimiento-parametros

Guía de ajuste de VPS de WordPress de Intel para sistemas Xeon

https://www.intel.com/content/www/us/en/developer/articles/guide/wordpress-tuning-guide-on-xeon-systems.html

Sugerencias de optimización de Linux para Steam Deck

Estas son optimizaciones de Linux para Steam Deck, pero también son aplicables a la optimización de VPS Linux. A continuación, se muestra el artículo de Medium del que extraje estos comandos, así como comandos de reversión para cada una de estas funciones de optimización, en caso de que desee revertirlas por cualquier motivo.

Pegue todos estos comandos como un solo bloque de código, no líneas individuales. Los comandos de reversión no deben ejecutarse junto con los comandos para habilitar estas funciones, solo si desea deshabilitarlas y volver a la configuración original.

Artículo mediano

https://medium.com/@abt/aquí-hay-algunos-ajustes-posiblemente-útiles-para-steamos-on-the-steam-deck-fcb6b571b577#6c57

Cambiar al regulador de CPU de “rendimiento” al iniciar

(pegue esto en su terminal como un bloque de código gigante, no ejecute los comandos individualmente)

gato << EOF | sudo tee /etc/systemd/system/cpu_performance.service

[Unidad]

Descripción=Regulador de rendimiento de la CPU

[Servicio]

Tipo=one-shot

ExecStart=/usr/bin/cpupower frecuencia-set -g rendimiento

[Instalar]

WantedBy=multi-usuario.objetivo

EOF

sudo systemctl daemon-reload

sudo systemctl enable cpu_performance.service

Para deshacer o revertir este cambio, ejecute:

sudo systemctl deshabilitar cpu_performance.service

MGLRU (Multi-Gen. Menos Usado Recientemente)

Esta es una de las adiciones más recientes al kernel original de Linux, recién incorporada para la versión 6.1 LTS (Soporte a Largo Plazo). Sin embargo, el kernel original aún no habilita esta funcionalidad por defecto.

(pegue esto en su terminal como un bloque de código gigante, no ejecute los comandos individualmente)

Para habilitar esta función, ejecute el comando de terminal:

gato << EOF | sudo tee /etc/tmpfiles.d/mglru.conf

con /sys/kernel/mm/lru_gen/enabled – – – – 7

con /sys/kernel/mm/lru_gen/min_ttl_ms – – – – 0

EOF

Comando de reversión:

sudo rm /etc/tmpfiles.d/mglru.conf

Desbloqueo del bloqueo de memoria

De forma predeterminada, el kernel de Linux establece este valor en tan solo 64 KiB, que es la cantidad máxima de memoria que el kernel bloqueará en una sola operación. Esta es una recomendación antigua.

Este comando establecerá este valor en 2 GB, ajústelo según sea necesario dependiendo de la capacidad de RAM de su servidor:

(pegue esto en su terminal como un bloque de código gigante, no ejecute los comandos individualmente)

gato << EOF | sudo tee /etc/security/limits.d/memlock.conf

* bloqueo de memoria duro 2147484

* bloqueo de memoria suave 2147484

EOF

Este sitio le ayudará a convertir los valores para que pueda reemplazar el valor anterior “2147484” con un valor apropiado para la memoria de su VPS.

http://www.csgnetwork.com/memconv.html

Para revertir el cambio, ejecute:

sudo rm /etc/security/limits.d/memlock.conf

Cambiar el programador de E/S (entrada/salida)

Vamos a cambiar permanentemente el programador de E/S a Kyber con el siguiente bloque (tenga en cuenta que esto funcionará con todos los casos, es decir, SSD NVMe, eMMC y microSD):

(pegue esto en su terminal como un bloque de código gigante, no ejecute los comandos individualmente)

gato << EOF | sudo tee /etc/udev/rules.d/64-ioschedulers.rules

ACCIÓN==»agregar|cambiar», KERNEL==»nvme[0-9]*», ATTR{cola/programador}=»kyber»

ACCIÓN==»añadir|cambiar», NÚCLEO==»sd[az]|mmcblk[0-9]*», ATTR{cola/rotacional}==»0″, ATTR{cola/programador}=»kyber»

EOF

Para deshacer/revertir este cambio:

sudo rm /etc/udev/rules.d/64-ioschedulers.rules

Optimización de la pila de red TCP

TCP Keepalive

Ajusta el tiempo que TCP debe esperar antes de enviar mensajes de mantenimiento de conexión para confirmar que una conexión inactiva sigue activa. Esto puede ayudar a gestionar las sobrecargas de conexión.

(Ajuste los valores del comando según sea necesario)

sysctl -w net.ipv4.tcp_keepalive_time=600

sysctl -w net.ipv4.tcp_keepalive_probes=5

sysctl -w net.ipv4.tcp_keepalive_intvl=60

Escalado de ventana TCP

Permite ajustes del tamaño de la ventana TCP, permitiendo buffers más grandes, lo que puede mejorar el rendimiento de datos para las conexiones.

(Ajuste el valor del comando según sea necesario)

sysctl -w net.ipv4.tcp_window_scaling=1

TCP SACK

La función de reconocimiento selectivo (SACK) permite que los dispositivos informen a los remitentes sobre paquetes perdidos, lo que facilita retransmisiones más eficientes.

(Ajuste el valor del comando según sea necesario)

sysctl -w net.ipv4.tcp_sack=1

Tiempo de espera de TCP FIN

Ajusta el tiempo de espera para cerrar una conexión, liberando recursos antes.

(Ajuste el valor del comando según sea necesario)

sysctl -w net.ipv4.tcp_fin_timeout=30

Aumentar el backlog de sincronización máxima de TCP

Determina la cantidad de conexiones entrantes que se pueden poner en cola para su procesamiento.

(Ajuste el valor del comando según sea necesario)

sysctl -w net.ipv4.tcp_max_syn_backlog=2048

Aumentar el máximo de contenedores Tw de TCP

Controla el número máximo de sockets TCP en estado TIME_WAIT, administrando el uso de la memoria.

(Ajuste el valor del comando según sea necesario)

sysctl -w net.ipv4.tcp_max_tw_buckets=400000

Apertura rápida TCP

Permite enviar datos durante el protocolo de enlace SYN inicial, lo que reduce la latencia de las conexiones.

(Ajuste el valor del comando según sea necesario)

sysctl -w net.ipv4.tcp_fastopen=3

Comandos de reversión

Para revertir la configuración TCP, necesitará conocer los valores predeterminados, que pueden variar según su distribución y versión de Linux. Aquí tiene comandos para establecer valores predeterminados típicos:

sysctl -w net.ipv4.tcp_keepalive_time=7200

sysctl -w net.ipv4.tcp_keepalive_probes=9

sysctl -w net.ipv4.tcp_keepalive_intvl=75

sysctl -w net.ipv4.tcp_window_scaling=1

sysctl -w net.ipv4.tcp_sack=1

sysctl -w net.ipv4.tcp_fin_timeout=60

sysctl -w net.ipv4.tcp_max_syn_backlog=128

sysctl -w net.ipv4.tcp_max_tw_buckets=5000

sysctl -w net.ipv4.tcp_fastopen=0

Habilitar E/S asíncrona (AIO)

Habilite AIO para permitir que múltiples operaciones de E/S se ejecuten simultáneamente, lo que mejora el rendimiento de servidores de bases de datos como MySQL

innodb_use_native_aio = 1

Procesamiento de descarga

Habilite las funciones de descarga en su interfaz de red para reducir la carga de la CPU

ethtool -K eth0 gro en

ethtool -K eth0 gso activado

ethtool -K eth0 tso activado

Aumentar los límites de archivos abiertos

Asegúrese de que su sistema pueda manejar una gran cantidad de archivos abiertos

echo «fs.file-max = 500000» >> /etc/sysctl.conf

ulimit -n 500000

Habilitar el almacenamiento en caché de escritura diferida para E/S de disco

Mejore el rendimiento de escritura al habilitar el almacenamiento en caché de escritura diferida

hdparm -W1 /dev/sda

Almacene archivos temporales en la memoria para acelerar las operaciones de lectura/escritura

montaje -t tmpfs -o tamaño=512M tmpfs /tmp

Optimizar el uso de la memoria

Utilice zram para comprimir los datos de RAM para aumentar la cantidad de memoria disponible

apt-get install zram-config

Optimizar la configuración de la memoria virtual

Ajuste la configuración de la memoria virtual para un mejor rendimiento

sysctl -w vm.proporción_de_fondo_sucio=5

sysctl -w vm.dirty_ratio=10

Utilice el aislamiento de la CPU

Aísle los núcleos de CPU para aplicaciones críticas para garantizar que tengan recursos dedicados

isolcpus=1,2

Configurar páginas HugeTLB

Para aplicaciones que requieren páginas de memoria grandes, configure HugeTLB para reducir las fallas de TLB

echo ‘vm.nr_hugepages=128’ >> /etc/sysctl.conf

Optimizar la resolución de DNS

Utilice una caché DNS local

Instalar y configurar un servidor de almacenamiento en caché DNS local como dnsmasq

apt-get install dnsmasq

Ajustar la configuración de eliminación de memoria insuficiente (OOM)

Evite que el asesino OOM finalice procesos críticos ajustando oom_score_adj

echo ‘-1000’ > /proc/$(pidof proceso_crítico)/oom_score_adj

Utilice discos RAM para almacenamiento temporal de alto rendimiento

Monte una parte de su RAM como disco para operaciones de E/S extremadamente rápidas

montaje -t tmpfs -o tamaño=1G tmpfs /mnt/ramdisk

Optimizar la configuración de intercambio

Utilice zswap

Habilite y configure zswap para un mejor rendimiento del intercambio

echo 1 > /sys/module/zswap/parameters/enabled

echo lz4 > /sys/módulo/zswap/parámetros/compresor

echo 20 > /sys/module/zswap/parameters/max_pool_percent

Optimizar los parámetros de arranque

Modificar los parámetros de arranque para mejorar el rendimiento

GRUB_CMDLINE_LINUX_DEFAULT=»pantalla silenciosa noapic noacpi nosplash irqpoll»

Reducir la latencia del kernel

Habilitar la preempción del kernel y configurar ajustes de baja latencia

echo 1 > /sys/kernel/debug/sched_features

Habilitar y configurar HugeTLBfs

Utilice HugeTLBfs para asignar páginas grandes a aplicaciones que pueden beneficiarse de la reducción de errores de TLB

montaje -t hugetlbfs ninguno /dev/hugepages

Configurar la vinculación de red

Combine múltiples interfaces de red para aumentar el ancho de banda y la redundancia

apt-get install ifenslave

echo «enlace» >> /etc/modules

Ajuste preciso de las cookies TCP SYN

Habilite las cookies SYN para protegerse contra ataques de inundación SYN y permitir el tráfico legítimo.

sysctl -w net.ipv4.tcp_syncookies=1

Optimizar la configuración de caché ARP

Ajuste la configuración de caché ARP para gestionar grandes cantidades de direcciones IP de manera eficiente

sysctl -w net.ipv4.neigh.default.gc_thresh1=1024

sysctl -w net.ipv4.neigh.default.gc_thresh2=2048

sysctl -w net.ipv4.neigh.default.gc_thresh3=4096

Habilitar la protección contra suplantación de IP

Configurar ajustes para evitar la suplantación de IP

sysctl -w net.ipv4.conf.all.rp_filter=1

sysctl -w net.ipv4.conf.default.rp_filter=1

Optimizar los parámetros de memoria compartida del kernel

Ajuste la configuración de memoria compartida para mejorar el rendimiento de las aplicaciones que utilizan IPC (comunicación entre procesos)

sysctl -w kernel.shmmax=68719476736

sysctl -w kernel.shmall=4294967296

Ajustar la configuración de sobreasignación de la máquina virtual

Ajuste el comportamiento de sobreasignación de memoria para una mejor gestión de la memoria

sysctl -w vm.overcommit_memory=1

sysctl -w vm.sobrecompromiso_ratio=50

Habilite y configure el almacenamiento en caché de consultas en MySQL/MariaDB para obtener respuestas de consultas más rápidas

tamaño de caché de consultas = 64M

tipo_caché_consulta = ON

Configurar marcas de tiempo TCP

Habilite o deshabilite las marcas de tiempo TCP según su carga de trabajo para mejorar el rendimiento

sysctl -w net.ipv4.tcp_timestamps=1

Ajustar el tamaño del búfer UDP

Aumente el tamaño del búfer UDP para las aplicaciones que utilizan UDP con frecuencia

sysctl -w net.core.rmem_max=26214400

sysctl -w net.core.wmem_max=26214400

Optimizar la configuración de nf_conntrack

Ajustar la configuración de seguimiento de conexión para tráfico de alto volumen

sysctl -w net.netfilter.nf_conntrack_max=131072

sysctl -w net.netfilter.nf_conntrack_tcp_timeout_establecido=1200

Habilitar el almacenamiento en caché de escritura en disco

Habilite el almacenamiento en caché de escritura en los discos para mejorar el rendimiento de escritura

hdparm -W1 /dev/sda

Optimizar Systemd para el rendimiento

Reducir los valores de tiempo de espera predeterminados de systemd para un arranque y apagado más rápidos

Tiempo de espera predeterminadoInicioSec=10s

Tiempo de espera predeterminado StopSec = 10 s

Optimizar la sincronización NTP

Asegúrese de una sincronización horaria precisa con una sobrecarga mínima utilizando chrony en lugar de ntpd

apt-get install chrony

Habilitar y configurar la descarga de la interfaz de red

Habilite las funciones de descarga en las interfaces de red para reducir el uso de la CPU

ethtool -K eth0 gro en

ethtool -K eth0 gso activado

ethtool -K eth0 tso activado

Implementar la fusión de páginas en el núcleo (KSM)

Habilite KSM para fusionar páginas de memoria idénticas entre máquinas virtuales

echo 1 > /sys/kernel/mm/ksm/run

Utilice temporizadores de alta resolución

Habilite temporizadores de alta resolución para aplicaciones que requieren una sincronización precisa

echo «alta resolución=activada» >> /etc/default/grub

actualización-grub

Optimizar los parámetros de sysctl para el rendimiento de la red

Ajuste varios parámetros de sysctl para mejorar el rendimiento de la red y reducir la latencia

sysctl -w net.ipv4.tcp_rfc1337=1

sysctl -w net.ipv4.tcp_mtu_probing=1

sysctl -w net.ipv4.tcp_base_mss=536

Implementar cuotas de disco para la gestión de usuarios

Habilite y configure cuotas de disco para administrar el uso del disco del usuario de manera eficiente

apt-get install cuota

Utilice las herramientas de administración de caché de páginas

Utilice herramientas como vmtouch para administrar y bloquear archivos a los que se accede con frecuencia en la memoria

apt-get install vmtouch

vmtouch -dl /ruta/a/archivos/importantes

Optimizar el comportamiento de intercambio

Configure vm.dirty_expire_centisecs y vm.dirty_writeback_centisecs para un mejor rendimiento del intercambio

sysctl -w vm.dirty_expire_centisecs=2000

sysctl -w vm.dirty_writeback_centisecs=1000

Implementar RAID de software para mejorar el rendimiento del disco

Utilice RAID de software para mejorar el rendimiento y la redundancia del disco

mdadm –create –verbose /dev/md0 –level=1 –raid-devices=2 /dev/sda1 /dev/sdb1

Optimizar la frecuencia del temporizador del kernel

Ajuste la frecuencia del temporizador del kernel para reducir la sobrecarga

echo 1000 > /proc/sys/kernel/frecuencia_del_temporizador

Habilitar IPv6

Habilite y optimice IPv6 para un mejor rendimiento de la red y protección para el futuro

sysctl -w net.ipv6.conf.all.disable_ipv6=0

Utilice xfs_fsr para la desfragmentación del sistema de archivos XFS

Desfragmentar los sistemas de archivos XFS para mejorar el rendimiento

xfs_fsr /dev/sda1

Optimizar la configuración del backlog de TCP

Aumente la configuración del backlog de TCP para manejar más conexiones simultáneas

sysctl -w net.core.somaxconn=1024

sysctl -w net.core.netdev_max_backlog=5000

Utilice mdadm para la gestión RAID de software

Administrar matrices RAID de software con mdadm

mdadm –create –verbose /dev/md0 –level=1 –raid-devices=2 /dev/sda1 /dev/sdb1

Implementar la sujeción TCP MSS

Ajuste el tamaño máximo de segmento (MSS) de TCP para evitar la fragmentación

iptables -t mangle -A ADELANTE -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu

Optimizar la protección contra inundaciones TCP SYN

Configurar la protección contra inundaciones TCP SYN para evitar ataques DoS

sysctl -w net.ipv4.tcp_syncookies=1

Habilitar y configurar dnsmasq para el almacenamiento en caché de DNS

Utilice dnsmasq para almacenar en caché las consultas DNS y reducir los tiempos de búsqueda

apt-get install dnsmasq

systemctl habilitar dnsmasq

systemctl iniciar dnsmasq

Habilite tcp_tw_recycle para una reutilización de la conexión más rápida

Habilite tcp_tw_recycle para acelerar la reutilización de la conexión

sysctl -w net.ipv4.tcp_tw_recycle=1

Utilice blktrace para el seguimiento de capas de bloques

Instalar y usar blktrace para rastrear operaciones de E/S de bloques

apt-get install blktrace

blktrace -d /dev/sda

Ajustar la configuración de pánico del kernel

Configurar el sistema para que se reinicie automáticamente después de un pánico del kernel

sysctl -w kernel.panic=10

sysctl -w kernel.panic_on_oops=1

Optimizar los relojes Inotify

Aumente la cantidad de observaciones de inotify para gestionar más eventos de archivos

sysctl -w fs.inotify.max_user_watches=524288

Habilitar el escalado de la ventana TCP

Mejore el rendimiento de TCP al habilitar el escalado de ventanas

sysctl -w net.ipv4.tcp_window_scaling=1

Habilitar sondas Keepalive de TCP

Configurar sondas keepalive de TCP para administrar conexiones inactivas

sysctl -w net.ipv4.tcp_keepalive_time=300

sysctl -w net.ipv4.tcp_keepalive_intvl=60

sysctl -w net.ipv4.tcp_keepalive_probes=5

Optimizar los algoritmos de control de congestión TCP

Experimente con diferentes algoritmos de control de congestión TCP para encontrar el que mejor se adapte a su carga de trabajo

sysctl -w net.ipv4.tcp_congestion_control=bbr

Utilice schedtool para la programación avanzada de CPU

Instalar y usar schedtool para controlar las políticas de programación de la CPU

apt-get install schedtool

herramienta de programación -R -p 20 -e myapp

Habilitar la fusión de páginas del mismo núcleo (KSM)

Utilice KSM para reducir el uso de memoria fusionando páginas de memoria idénticas

echo 1 > /sys/kernel/mm/ksm/run

Optimizar el tamaño del búfer de red

Aumente el tamaño del búfer de red para manejar altos volúmenes de tráfico

sysctl -w net.core.rmem_max=16777216

sysctl -w net.core.wmem_max=16777216

Optimizar el programador del kernel

Ajuste la configuración del programador del kernel para un mejor rendimiento

echo 1 > /proc/sys/kernel/sched_autogroup_enabled

Ajustar la configuración del rcu para sistemas de baja latencia

Ajuste la configuración de actualización de lectura-copia (RCU) para un rendimiento de baja latencia

eco 0 > /sys/kernel/rcu_expedited

Optimizar el registro del sistema de archivos

Elija el modo de registro apropiado para su sistema de archivos (por ejemplo, data=writeback para ext4)

mount -o remount,datos=escritura diferida /dev/sda1

Habilitar y configurar el control de congestión TCP BBRv2

Utilice BBRv2 para un rendimiento de control de congestión TCP aún mejor

echo «net.ipv4.tcp_congestion_control=bbr» >> /etc/sysctl.conf

sysctl -p

Optimice el rendimiento del sistema de archivos con tune2fs

Utilice tune2fs para optimizar los parámetros del sistema de archivos ext4

tune2fs -o escritura de datos de diario /dev/sda1

Utilice ethtool para optimizar la configuración de NIC

Ajuste la configuración de la NIC para un mejor rendimiento de la red

ethtool -K eth0 tso desactivado

Habilitar y configurar la formación de equipos de interfaz de red

Utilice la agrupación de interfaces de red para equilibrar la carga y la conmutación por error

apt-get install ifenslave

Utilice irqbalance para equilibrar interrupciones

Instalar y configurar irqbalance para distribuir interrupciones entre las CPU

apt-get install irqbalance

Ajustar los parámetros del semáforo del kernel

Ajuste la configuración del semáforo para un mejor rendimiento con aplicaciones que utilizan mucho IPC

sysctl -w kernel.sem=»250 32000 100 128″

Configurar y utilizar ethtool para la optimización de la red

Utilice ethtool para optimizar la configuración de la interfaz de red

ethtool -K eth0 rx desactivado tx desactivado

Habilitar colas pequeñas TCP (TSQ)

Optimice la pila TCP habilitando TSQ

sysctl -w net.ipv4.tcp_limit_output_bytes=131072

Habilitar y configurar EarlyOOM

Utilice EarlyOOM para gestionar situaciones de falta de memoria con más elegancia

apt-get install earlyoom

Optimizar la caché de inodos

Ajuste la configuración de caché de inodos para manejar grandes cantidades de archivos

sysctl -w fs.inode-nr

sysctl -w fs.estado-inodo

Optimizar el almacenamiento en caché del disco

Ajuste vm.dirty_ratio y vm.dirty_background_ratio para controlar el comportamiento del almacenamiento en caché del disco

sysctl -w vm.dirty_ratio=20

sysctl -w vm.proporción_de_fondo_sucio=10

Implementar alias de direcciones IP

Utilice alias de direcciones IP para administrar varias direcciones IP en una única interfaz de red, lo que mejora el rendimiento y la administración de la red.

dirección IP agregar 192.168.1.2/24 dev eth0

Habilitar E/S asincrónica para servidores de bases de datos

Habilite la E/S asincrónica (AIO) para servidores de bases de datos como MySQL o PostgreSQL para mejorar el rendimiento de E/S del disco

innodb_use_aio nativo=1

Optimizar la configuración de reensamblaje de TCP

Ajuste la configuración de reensamblaje de TCP para manejar paquetes fragmentados de manera más eficiente

sysctl -w net.ipv4.tcp_reordering=3

Habilitar jemalloc para la asignación de memoria

Utilice jemalloc como asignador de memoria para aplicaciones como Nginx, MySQL o Redis para mejorar el rendimiento de la gestión de memoria.

LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2

Ajustar los algoritmos del elevador de E/S

Cambie a un algoritmo de elevador de E/S más adecuado, como mq-deadline o none para SSD

echo mq-deadline > /sys/block/sda/queue/scheduler

Utilice fstrim para SSD

Ejecute periódicamente fstrim para informar al SSD de los bloques no utilizados, lo que mejora el rendimiento

fstrim -v /

Optimizar la configuración de Keepalive de TCP

Ajuste la configuración de keepalive de TCP para administrar mejor las conexiones inactivas

sysctl -w net.ipv4.tcp_keepalive_time=120

sysctl -w net.ipv4.tcp_keepalive_intvl=30

sysctl -w net.ipv4.tcp_keepalive_probes=5

Optimizar la sobreasignación de memoria virtual

Ajuste la configuración de sobreasignación de memoria virtual para gestionar mejor la asignación de memoria

sysctl -w vm.overcommit_memory=2

sysctl -w vm.sobrecompromiso_ratio=50

Utilice ethtool para ajustar la interfaz de red

Ajuste la configuración de la interfaz de red para un mejor rendimiento

ethtool -K eth0 rx desactivado tx desactivado

Implementar el control de congestión TCP BBRv2

Utilice BBRv2 para mejorar el rendimiento del control de congestión de TCP

sysctl -w net.ipv4.tcp_congestion_control=bbr

Optimice el rendimiento de E/S con blk-mq (mecanismo de cola de E/S de bloque de múltiples colas)

Habilite y configure blk-mq para un mejor rendimiento de E/S en SSD

echo «mq-deadline» > /sys/block/sda/queue/scheduler

Utilice schedtool para controlar las políticas de programación de la CPU

Instalar y usar schedtool para administrar la programación de la CPU

apt-get install schedtool

herramienta schedtool -R -p 20 -e /usr/bin/myapp

Optimizar el tiempo de espera de retransmisión de TCP (RTO)

Ajuste la configuración de TCP RTO para un mejor rendimiento

sysctl -w net.ipv4.tcp_retries2=5

Optimizar las cookies TCP SYN

Habilite las cookies TCP SYN para protegerse contra ataques de inundación SYN

sysctl -w net.ipv4.tcp_syncookies=1

Optimizar el escalado de la ventana TCP

Habilite el escalado de la ventana TCP para un mejor rendimiento

sysctl -w net.ipv4.tcp_window_scaling=1

Utilice cgroups para la gestión de recursos

Implementar cgroups para limitar, priorizar y aislar el uso de recursos de los procesos

cgcreate -g cpu,memoria:migrupo

cgset -r cpu.shares=512 migrupo

cgset -r memoria.límite_en_bytes=512M migrupo

Optimizar los búferes de memoria TCP

Ajuste la configuración del búfer de memoria TCP para un mejor rendimiento

sysctl -w net.ipv4.tcp_rmem=’4096 87380 16777216′

sysctl -w net.ipv4.tcp_wmem=’4096 65536 16777216′

Optimizar los programadores del kernel

Elija el programador de E/S adecuado para su carga de trabajo (no para SSD)

echo «noop» > /sys/block/sda/queue/scheduler

Optimizar los parámetros de memoria compartida del kernel

Ajuste la configuración de memoria compartida para un mejor rendimiento con aplicaciones que hacen un uso intensivo de IPC

sysctl -w kernel.shmmax=68719476736

sysctl -w kernel.shmall=4294967296

Implementar ZFS para funciones avanzadas del sistema de archivos

Utilice ZFS para obtener una mejor integridad de los datos, instantáneas y rendimiento

apt-get install zfsutils-linux

zpool crea mypool /dev/sda

Habilitar acuses de recibo selectivos de TCP (SACK)

Optimice el rendimiento de TCP con SACK

sysctl -w net.ipv4.tcp_sack=1

Habilitar y configurar zram para intercambio comprimido

Utilice zram para crear un dispositivo de bloque comprimido en RAM

apt-get install zram-config

Implementar el sellado de tiempo TCP

Habilite las marcas de tiempo TCP para un mejor rendimiento y confiabilidad

sysctl -w net.ipv4.tcp_timestamps=1

Utilice zpool para la gestión de grupos ZFS

Administrar grupos de almacenamiento ZFS con zpool

zpool crea mypool /dev/sda

Optimizar el tiempo de acceso al sistema de archivos

Utilice las opciones de montaje noatime y nodiratime para reducir la E/S del disco

mount -o remontar,noatime,nodiratime /

Optimizar el tamaño de la cartera de TCP

Aumente el tamaño del backlog de TCP para manejar más conexiones entrantes

sysctl -w net.core.somaxconn=1024

Optimizar la configuración de la memoria virtual del kernel

Ajuste la configuración de la memoria virtual para un mejor rendimiento y optimice los límites del controlador de archivos del kernel

Aumentar la cantidad de controladores de archivos que el kernel puede administrar

sysctl -w fs.file-max=2097152