--- title: "Cómo ajustar el kernel con sysctl en Ubuntu 24.04" description: "Aprende a consultar y cambiar parámetros del kernel con sysctl en Ubuntu 24.04, hacerlos persistentes en /etc/sysctl.d y ajustar memoria y swap con criterio." category: "Optimización de Rendimiento" language: es source: https://cubepath.com/es/docs/optimización-de-rendimiento/optimizacion-de-rendimiento-linux-sysctl-y-parametros-kernel updated: 2026-09-25 --- # Cómo ajustar el kernel con sysctl en Ubuntu 24.04 `sysctl` es la herramienta para leer y modificar en caliente los parámetros del kernel de Linux que se exponen en `/proc/sys`. Ajustar unos pocos de ellos (cuánto usa el sistema la swap, cuándo vacía a disco los datos pendientes o cuánta memoria puede reservar un proceso) puede mejorar la estabilidad y la latencia de un servidor. En este tutorial aprenderás a consultar y cambiar parámetros en Ubuntu 24.04, a hacer los cambios persistentes de forma ordenada y a aplicar un conjunto de ajustes de memoria razonable, midiendo antes y después. Los valores por defecto de un kernel moderno son buenos para la mayoría de cargas. La regla de este tutorial es cambiar solo lo que tenga un motivo y comprobar su efecto. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath. Los comandos son iguales en Debian 12 y Rocky Linux 9. - Un usuario no root con privilegios `sudo`. - Conocer qué carga ejecuta el servidor (web, base de datos, contenedores), porque varios ajustes dependen de ello. ## Paso 1: Consultar parámetros del kernel Cada parámetro tiene un nombre con puntos que corresponde a una ruta en `/proc/sys`. Por ejemplo, `vm.swappiness` es `/proc/sys/vm/swappiness`. Consulta un valor: ```bash sysctl vm.swappiness ``` ```output vm.swappiness = 60 ``` Consulta varios a la vez o busca por nombre: ```bash sysctl vm.dirty_ratio vm.dirty_background_ratio sudo sysctl -a | grep ^vm.overcommit ``` ```output vm.dirty_ratio = 20 vm.dirty_background_ratio = 10 vm.overcommit_kbytes = 0 vm.overcommit_memory = 0 vm.overcommit_ratio = 50 ``` Los prefijos agrupan los parámetros por subsistema: `vm.*` (memoria virtual), `net.*` (red), `fs.*` (sistemas de archivos) y `kernel.*` (núcleo). ## Paso 2: Tomar una línea base Antes de cambiar nada, registra cómo se comporta el servidor bajo su carga habitual para poder comparar después. Estos tres comandos cubren memoria, swap y escritura a disco: ```bash free -h ``` ```output total used free shared buff/cache available Mem: 3.8Gi 1.2Gi 410Mi 12Mi 2.4Gi 2.6Gi Swap: 2.0Gi 310Mi 1.7Gi ``` ```bash vmstat 5 6 ``` En la salida de `vmstat`, las columnas `si` y `so` muestran KB por segundo leídos y escritos en swap, y `wa` el porcentaje de CPU esperando E/S. Si `si` y `so` son distintos de cero de forma sostenida, el servidor está paginando. ```bash grep -E '^(Dirty|Writeback):' /proc/meminfo ``` ```output Dirty: 8456 kB Writeback: 0 kB ``` `Dirty` es la cantidad de datos escritos por las aplicaciones que aún no se han volcado a disco. ## Paso 3: Probar un cambio temporal `sysctl -w` cambia un valor al instante, pero el cambio se pierde al reiniciar. Es la forma segura de probar: ```bash sudo sysctl -w vm.swappiness=10 ``` ```output vm.swappiness = 10 ``` Si el cambio empeora algo, basta con volver a escribir el valor anterior o reiniciar. ## Paso 4: Hacer los cambios persistentes Los parámetros persistentes se guardan en archivos `.conf` dentro de `/etc/sysctl.d/`. Al arrancar, `systemd-sysctl` los aplica en orden alfabético y el último valor leído gana. Usar un archivo propio en lugar de editar `/etc/sysctl.conf` deja claro qué has cambiado y facilita deshacerlo. Crea el archivo: ```bash sudo nano /etc/sysctl.d/99-tuning.conf ``` Añade los ajustes que correspondan a tu servidor. Este es un punto de partida para un servidor de aplicaciones o base de datos con 4 GB de RAM o más: ```ini # Usar la swap solo cuando la memoria escasea de verdad vm.swappiness = 10 # Empezar a volcar datos pendientes antes y limitar cuánto se acumula vm.dirty_background_ratio = 5 vm.dirty_ratio = 10 ``` Aplica todos los archivos de configuración sin reiniciar: ```bash sudo sysctl --system ``` La salida lista cada archivo leído. Comprueba que tu archivo aparece y que los valores están activos: ```output ... * Applying /etc/sysctl.d/99-tuning.conf ... vm.swappiness = 10 vm.dirty_background_ratio = 5 vm.dirty_ratio = 10 * Applying /etc/sysctl.conf ... ``` ```bash sysctl vm.swappiness vm.dirty_ratio vm.dirty_background_ratio ``` > Nota: `/etc/sysctl.conf` se aplica el último. Si define el mismo parámetro que tu archivo, su valor prevalece. Revísalo con `grep -v '^#' /etc/sysctl.conf` si un ajuste no se aplica. ## Paso 5: Elegir los ajustes de memoria Esta tabla recoge los parámetros de memoria que merece la pena conocer, su valor por defecto en Ubuntu 24.04 y cuándo cambiarlo: | Parámetro | Por defecto | Valor habitual | Cuándo cambiarlo | |---|---|---|---| | `vm.swappiness` | 60 | 10 | Servidores de bases de datos y aplicaciones donde la latencia importa más que la caché de disco | | `vm.dirty_background_ratio` | 10 | 5 | Servidores con mucha RAM y escrituras en ráfagas que provocan picos de E/S | | `vm.dirty_ratio` | 20 | 10 | Junto con el anterior, para que ninguna escritura se bloquee acumulando gigas pendientes | | `vm.overcommit_memory` | 0 | 1 | Solo para Redis u otros servicios que lo recomienden en su documentación | | `vm.max_map_count` | 1048576 | Sin cambios | Ya supera los 262144 que piden Elasticsearch y OpenSearch | | `vm.vfs_cache_pressure` | 100 | Sin cambios | Solo con millones de archivos pequeños y medición previa | Algunas aclaraciones: - **`vm.swappiness`** no desactiva la swap. Con un valor bajo el kernel prefiere liberar caché de disco antes que enviar a swap memoria de procesos. Con `0` se puede llegar antes al OOM killer, por eso `10` es más prudente. - **`vm.dirty_ratio`** es un porcentaje de la memoria disponible. En un servidor con 64 GB, el 20% por defecto permite acumular más de 12 GB sin escribir, y el volcado posterior satura el disco. Si tienes mucha RAM puedes usar valores absolutos con `vm.dirty_background_bytes` y `vm.dirty_bytes`; al fijar la variante en bytes, la de porcentaje pasa a 0 automáticamente. - **`vm.overcommit_memory = 1`** permite reservar más memoria de la que existe. Redis lo necesita para que `fork()` no falle al guardar a disco, pero en otros servidores es mejor dejar `0`. Hay parámetros que aparecen en muchas guías antiguas y ya no hace falta tocar en Ubuntu 24.04: `fs.file-max` (su valor por defecto es prácticamente ilimitado), `kernel.pid_max` (4194304) y `net.core.somaxconn` (4096). El límite de archivos abiertos que suele dar problemas es el de cada proceso, que se configura con `ulimit` y systemd, no con sysctl. ## Paso 6: Verificar el efecto Con la carga habitual en marcha, repite las mediciones del paso 2 y compáralas: ```bash vmstat 5 6 grep -E '^(Dirty|Writeback):' /proc/meminfo ``` Lo que deberías ver: - Con `vm.swappiness = 10`, las columnas `si` y `so` de `vmstat` más cerca de cero mientras haya caché de disco que liberar. - Con los ratios de volcado reducidos, valores de `Dirty` más bajos y picos de `wa` más cortos durante escrituras intensas. Si no ves diferencia, el parámetro no era el cuello de botella: elimina esa línea del archivo para mantener la configuración mínima. ## Deshacer los cambios Para volver a los valores por defecto, borra tu archivo y reinicia: ```bash sudo rm /etc/sysctl.d/99-tuning.conf sudo reboot ``` Si no puedes reiniciar, vuelve a escribir los valores por defecto con `sudo sysctl -w` (por ejemplo `vm.swappiness=60`). ## Solución de problemas **`sysctl: cannot stat /proc/sys/...: No such file or directory`.** El parámetro no existe en tu kernel o el módulo que lo proporciona no está cargado. Comprueba el nombre con `sudo sysctl -a | grep nombre`. **`sysctl: permission denied on key`.** Falta `sudo`, o el parámetro es de solo lectura. Dentro de contenedores muchos parámetros no se pueden cambiar desde el invitado. **El valor vuelve a cambiar tras reiniciar.** Otro archivo posterior en orden alfabético, o `/etc/sysctl.conf`, lo sobrescribe. Localízalo con `grep -r nombre_parametro /etc/sysctl.conf /etc/sysctl.d/ /usr/lib/sysctl.d/`. ## Conclusión Ya sabes consultar parámetros del kernel, probarlos en caliente, guardarlos en `/etc/sysctl.d/` y medir si aportan algo. Como siguientes pasos, puedes ajustar la pila de red con la guía de ajuste TCP/IP para alto rendimiento, subir el límite de archivos abiertos por proceso con `ulimit` y `LimitNOFILE` de systemd, o consultar la documentación oficial de cada parámetro en `https://docs.kernel.org/admin-guide/sysctl/vm.html`.