# rm-rf.es

sysctl y /proc/sys – modificar parámetros de kernel

El kernel Linux permite modificar una gran cantidad de parámetros sin necesidad de recompilarlo. Estos parámetros afectan al funcionamiento del sistema en mayor o menor medida así que conviene saber el modo de optimizarlos y/o saber como modificarlos. El comando sysctl suele ser la forma más común de hacerlo. Los valores se almacenan en el directorio /proc/sys.

Hay que tener en cuenta que cuando modificamos los parámetros vía sysctl los cambios surten efecto al instante, pero tras un reinicio se pierden, por eso conviene guardar las personalizaciones y cambios en el fichero de configuración de sysctl /etc/sysctl.conf. En alguna otra entrada ya hemos visto algún cambio de estos parámetros, como por ejemplo el valor del swappiness para optimizar el uso de memoria, que hacer ante un kernel panic o ip_conntrack_max.

Lo primero que podemos observar con el comando sysctl -a es un listado de los parámetros configurables junto con su valor actual:

# sysctl -a
kernel.sched_child_runs_first = 0
kernel.sched_min_granularity_ns = 4000000
kernel.sched_latency_ns = 12000000
kernel.sched_wakeup_granularity_ns = 2000000
kernel.sched_shares_ratelimit = 500000
kernel.sched_tunable_scaling = 1
kernel.sched_shares_thresh = 4
kernel.sched_migration_cost = 500000
...
...

Vamos a trabajar con el ejemplo de la variable para kernel panic. Vamos a modificarlo de 0 a 5 para indicar que ante un kernel panic el sistema se reinicie pasados 5 segundos. Por defecto está a 0:

# sysctl -a | grep panic
kernel.panic = 0

Podemos cambiarlo de dos formas: cambiando el parámetro con sysctl o volcando el «5» directamente al fichero en /proc/sys:

# echo 5 > /proc/sys/kernel/panic
# sysctl -a | grep panic
kernel.panic = 5
# sysctl -w kernel.panic=5
# sysctl -a | grep panic
kernel.panic = 5

Para guardarlo tras el reinicio tendríamos que añadir la siguiente línea a /etc/sysctl.conf:

kernel.panic = 5

Si únicamente lo añadimos al fichero de configuración y no ejecutamos sysctl ni echo tenemos que actualizar la configuración con sysctl -p para que los cambios sean efectivos al instante:

# sysctl -p
kernel.panic = 5
# sysctl -a | grep panic
kernel.panic = 5

Esta es la forma de utilizar el comando sysctl linux, a partir de aquí solo es necesario utilizarlo para «tunear» aquellos parámetros de kernel que necesitemos.

Salir de la versión móvil