# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

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.

Optimizar el uso de memoria RAM y Swap en Linux (Swappiness)


En el Kernel Linux, existe la posibilidad de configurar la proporción/relación de uso que se va a dar a la memoria RAM y a la memoria Swap en nuestro sistema.

Como la mayoría sabéis la memoria Swap, también conocida como memoria o espacio de intercambio es simplemente una partición asignada en un disco duro (del tamaño que estimemos necesario) cuya función es actuar como si de memoria RAM se tratase en el momento que hay poca memoria RAM disponible en el sistema.

Existe una gran penalización cuando usamos Swap en vez de RAM, ya que utilizamos el disco para el volcado de los datos que normalmente tendrían que ir en memoria física (RAM), esto provoca la ralentización general del sistema operativo, por lo que normalmente hay que intentar usar la menor cantidad de memoria Swap posible.

El objetivo de este artículo no es explicar las ventajas/desventajas de cada una de las memorias, sino saber cómo decirle a nuestro sistema operativo, y en concreto al Kernel Linux que porcentaje/ratio de memoria RAM usada es el límite para comenzar a utilizar swap.

Existe un parámetro a nivel de kernel, swappiness al que podemos asignarle un valor, de 0 a 100, que indicará la preferencia de la memoria Swap respecto a la RAM, la tendencia del sistema a mover procesos a disco en lugar de a memoria física.

Un valor de swappiness alto provocará que el kernel tenga tendencia a utilizar más memoria Swap, mientras que cuanto más bajo sea, mayor preferencia tendrá la memoria RAM. Por defecto creo recordar que el valor de swappiness es de 60:

$ cat /proc/sys/vm/swappiness
60

Para modificarlo a tiempo real, hacemos uso de sysctl del siguiente modo (como root):

sysctl vm.swappiness=30

Hay que tener en cuenta que de este modo perderemos el cambio tras un reinicio, para modificarlo de forma permanente editamos el fichero /etc/sysctl.conf

vim /etc/sysctl.conf

Y añadimos/modificamos:

vm.swappiness=30

Conviene probar diferentes valores hasta dar con el correcto, pues cada sistema puede tener unos requerimientos especiales, es interesante probar a tiempo real y controlar el rendimiento del sistema hasta dar con el valor óptimo para nuestros sistemas.

Cómo configurar un servidor Linux para rebotar automáticamente ante un Kernel Panic


Por defecto el sistema operativo Gnu/Linux , o más concretamente, el Kernel Linux no está configurado para rebotar ante un posible Kernel Panic, que no es otra cosa que un mensaje del sistema en el que indica que ha detectado un error interno del cual no se puede recuperar.

Para que nuestro sistema se reinicie automáticamente ante un Kernel Panic, y evitar dejar el mismo sin servicio debemos hacer lo siguiente:

Abrir el fichero de configuración /etc/sysctl.conf y añadir la siguiente línea:

vi /etc/sysctl.conf
kernel.panic = 15

Otra opción es ejecutar directamente:

/sbin/sysctl -w kernel.panic=15

Encontrado en LinuxScrew.org