Volver a herramientas

Optimizador de sysctl.conf

Acerca de sysctl

sysctl es una utilidad para modificar parámetros del kernel de Linux en tiempo de ejecución. Los parámetros se encuentran en /proc/sys/ y pueden configurarse en /etc/sysctl.conf.

Esta herramienta genera una configuración para /etc/sysctl.d/99-tuning.conf que puedes aplicar con:


sudo sysctl -p /etc/sysctl.d/99-tuning.conf
              

Kernel Tuning por tipo de servidor

La optimización del kernel de Linux no es universal — cada tipo de servidor requiere ajustes específicos para maximizar su rendimiento. Un servidor web que maneja miles de conexiones concurrentes necesita parámetros TCP muy diferentes a un servidor de bases de datos que prioriza la velocidad de E/S de disco o un servidor de archivos con grandes transferencias.

Servidor web (Nginx/Apache): Prioriza el manejo de conexiones efímeras con net.ipv4.tcp_tw_reuse=1, net.core.somaxconn=65535 para colas de escucha, y net.ipv4.tcp_keepalive_time=60 para detectar conexiones muertas rápidamente. El backlog de escucha elevado evita rechazar conexiones durante picos de tráfico.

Base de datos (PostgreSQL/MySQL/MariaDB): Reduce vm.swappiness=1 o 10 para minimizar swap, ajusta vm.dirty_ratio=20 y vm.dirty_background_ratio=5 para escrituras más frecuentes y síncronas. La caché de página debe mantenerse caliente para consultas repetitivas.

Servidor de archivos (Samba/NFS): Incrementa vm.dirty_ratio=40 y vm.dirty_background_ratio=15 para amortiguar escrituras grandes. Aumenta net.ipv4.tcp_wmem y net.core.wmem_default para transferencias de archivos de gran tamaño. Con BBR como algoritmo de congestión, las transferencias largas se benefician de una sonda de ancho de banda más agresiva.

Preguntas frecuentes

¿Qué es sysctl y cómo se usa para optimizar el kernel de Linux?

sysctl es una utilidad de Linux que permite modificar parámetros del kernel en tiempo de ejecución sin necesidad de recompilarlo. Los parámetros se encuentran en /proc/sys/ y se configuran permanentemente en /etc/sysctl.conf o archivos en /etc/sysctl.d/. Permite optimizar red, memoria, seguridad y rendimiento general del sistema.

¿Qué parámetros sysctl mejoran el rendimiento de red?

Los parámetros clave incluyen: net.core.rmem_max y net.core.wmem_max para buffers de red, net.ipv4.tcp_congestion_control para algoritmos de congestión (bbr, cubic), net.ipv4.tcp_slow_start_after_idle para mantener velocidad en conexiones persistentes, y net.core.netdev_max_backlog para colas de entrada. Ajustarlos correctamente puede mejorar drásticamente el rendimiento TCP.

¿Cómo aplicar los cambios de sysctl sin reiniciar el servidor?

Puedes aplicar los cambios de inmediato con "sudo sysctl -p /etc/sysctl.d/99-tuning.conf". También puedes usar "sudo sysctl -w parametro=valor" para cambiar un parámetro específico en caliente. Para verificar el valor actual de cualquier parámetro, usa "sysctl nombre.parametro" o "cat /proc/sys/ruta/al/parametro".

¿Qué parámetros sysctl mejoran la seguridad del servidor?

Para seguridad, se recomienda: net.ipv4.conf.all.rp_filter=1 (protección contra IP spoofing), net.ipv4.tcp_syncookies=1 (protección contra SYN flood), net.ipv4.conf.all.accept_source_route=0 (evitar enrutamiento fuente), kernel.kptr_restrict=1 y kernel.dmesg_restrict=1 (restringir información del kernel), y net.ipv4.icmp_echo_ignore_broadcasts=1 (prevenir ataques Smurf).

¿Qué es TCP BBR y cómo se habilita con sysctl?

TCP BBR (Bottleneck Bandwidth and Round-trip propagation time) es un algoritmo de control de congestión desarrollado por Google que maximiza el rendimiento TCP. Se habilita con "net.ipv4.tcp_congestion_control=bbr". BBR es especialmente efectivo en conexiones con pérdida de paquetes o alto RTT, ofreciendo mejores velocidades que Cubic en muchos escenarios.

¿Cómo optimizar la memoria del sistema con sysctl?

Parámetros clave: vm.swappiness=10 para reducir el uso de swap (mejor rendimiento en servidores con RAM suficiente), vm.vfs_cache_pressure=50 para conservar caché de inodos/dentry, vm.dirty_ratio=30 y vm.dirty_background_ratio=10 para optimizar escritura en disco, y vm.overcommit_memory=1 para mejorar gestión de memoria en aplicaciones que reservan mucha RAM.