En este momento estás viendo Script para manejar el uso que hace el sistema de RAM y SWAP.

Script para manejar el uso que hace el sistema de RAM y SWAP.

Como continuación del post «Optimizar el uso de la memoria swap», vamos a hacer un script que nos permita controlar el uso de las memorias RAM y Swap que hace el sistema.

Cuando instalamos un sistema operativo linux, habilitamos una partición en el disco duro, para la memoria Swap. Esta memoria es llamada también partición de intercambio. Cuando los procesos en ejecución en nuestro sistema, llenan la memoria RAM, este recurre a esta partición del disco en busca de más espacio. Esto está pensado para liberar a la RAM de carga de trabajo.

Tenemos que tener en cuenta que la velocidad de lectura y escritura en la memoria RAM es muchísimo más rápida que la relativa a un disco duro, aunque sea un SSD. Por ello, si el sistema utiliza mucha Swap, todo irá mucho más lento.

Si disponemos de suficiente RAM, seguramente nos interesará no utilizar la Swap para tener más velocidad en la ejecución de los procesos.

Por otra parte, los SSD tienen un número limitado de escrituras, y si el sistema lo utiliza constantemente, limitará en el tiempo la vida del dispositivo.

Vamos a verlo. Al final del post adjunto el código del programa para poder probarlo o usarlo, si así te parece.

Cuando ejecutamos el programa nos aparece el siguiente menu:

La primera opción nos permite ver información sobre las memorias RAM y Swap. Nos ofrece la cantidad total de memoria, la usada, libre y disponible entre otros datos

Con la segunda opción veremos el valor de swappines. Todos los conceptos a los que hago referencia los puedes ver en «Optimizar el uso de la memoria swap»

Si queremos deshabilitar el uso de la memoria Swap, ejecutamos la opción 3

En el monitor del sistema vemos como traslada los datos de la Swap a la RAM y después se queda no disponible.

Con la cuarta opción volvemos a habilitar el uso de la Swap.

Con el monitor del sistema vemos como se vuelve a habilitar el uso de la Swap.

Si solo queremos traspasar los datos de la Swap a la Ram, pero no deshabilitar la Swap, lo haremos con la opción 5

Y con el monitor del sistema vemos que traslada los datos, pero la Swap sigue activa.

Con la opción 6 modificamos el valor de swappiness para la sesión actual. Cuando reiniciemos el equipo, el valor volverá al predeterminado que en este caso es 60.

Con la última opción haremos este cambio persistente. Como avisa el software, es necesario ejecutarlo con privilegios de sudo y los cambios se aplicarán tras un reinicio.

Y con la opción 8 salimos del programa. Avisa al usuario que ha finalizado, y que vigile la estabilidad del sistema por si los cambios generan algún problema.

Vamos con el código. Copia y pega el siguiente código a un fichero de un directorio de tu equipo y dale permisos de ejecución. En mi caso será:

chmod +x scriptswap.sh

Y aquí tienes el código

#!/bin/bash

# scriptswap.sh
# Script para gestionar el uso de la memoria swap por el sistema.
# Este programa ha sido creado por Francisco Javier Izquierdo Hidalgo.
# Este programa es software libre, puedes redistribuirlo y / o
# modificarlo bajo los términos de la Licencia Pública General de GNU
# publicado por la Free Software Foundation, ya sea la versión 2
# de la Licencia, o (a su elección) cualquier versión posterior.

# Este programa se distribuye con la esperanza de que sea útil,
# pero SIN NINGUNA GARANTÍA, sin siquiera la garantía implícita de
# COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO EN PARTICULAR. Ver el
# GNU General Public License para más detalles.

# Variables
estado=$(free -h)
valor=$(cat /proc/sys/vm/swappiness)

# Funciones

# Indicación de pausa de visualizacion
function pause(){
 local message="$@"
 echo
 [ -z $message ] && message="Presiona [Enter] para continuar..."
 read -p "$message" readEnterKey
}

# Mostrar un menu en pantalla
function show_menu(){
    date
    echo "------------------------------------------------------"
    echo "                   Menu Principal                     "
    echo "------------------------------------------------------"
    echo
    echo "1. Ver estado de uso de la RAM y Swap"
    echo "2. Ver valor de swapiness actual"
    echo "3. Deshabilitar el uso de la swap"
    echo "4. Habilitar el uso de la swap"
    echo "5. Trasladar datos de la swap a la RAM"
    echo "6. Modificar el valor de swappiness para la sesión"
    echo "7. Modificar valor de swapiness de forma persistente"
    echo "8. Salir"
}

# Mostrar mensaje de cabecera
function write_header(){
 local h="$@"
 echo "---------------------------------------------------------------"
 echo "     ${h}"
 echo "---------------------------------------------------------------"
}

# Ver estado de uso de RAM y Swap
function uso_memoria(){
write_header " Información del  uso de la memoria"
 echo "El uso de RAM y swap es:"
 echo
 echo "$estado"
 pause
}

# Ver valor de swapiness actual
function val_swappiness(){
write_header " Valor actual de swappiness"
 echo "El valor actual de swappines es:"
 cat /proc/sys/vm/swappiness
 pause
}

# Deshabilitar el uso de la swap
function swap_off(){
write_header " Deshabilitando el uso de la memoria swap"
 sudo swapoff -a
 sleep 3
 echo
 echo "Deshabilitado el uso de la swap"
uso_memoria
}

# Habilitar el uso de la swap
function swap_up(){
write_header " Habilitando el uso de la memoria swap"
 sudo swapon -a
 sleep 3
 echo
 echo "Habilitado el uso de la swap"
uso_memoria
}

# Trasladar datos de la Swap a RAM
function swap_on(){
write_header " Trasladando los datos de la swap a la RAM"
 sudo swapoff -a ; sudo swapon -a
 sleep 3
 echo
 echo "Trasladados los datos de la swap a la RAM con éxito"
 uso_memoria
}

# Modificar el valor swapiness en la sesión actual
function swappiness_ses(){
echo "                                                                   "
write_header "Vamos a modificar el valor swappiness para la sesión actual"
 echo "Cuanto menor sea este valor, más tardará el sistema en usar la swap"
 echo "Introduce el valor que te interese (entre 0 y 100)"
read n
 numero=$(echo $n | grep "^[0-9]*$")
        if [ $numero ]
	 then
          sudo sysctl vm.swappiness=$n
          echo "El nuevo valor de swapiness es :"
	  cat /proc/sys/vm/swappiness
        else
          echo "El valor debe ser numérico y estar en el rango 0-100"
          exit 1
        fi
 pause
}

# Modificar el valor swapiness de forma persistente
function swappiness_per(){
write_header " Vamos a modificar el valor swapiness de forma persistente"
 echo "Se requieren privilegios de sudo y los cambios se aplicarán tras un reinicio"
 echo "Cuanto menor sea este valor, más tardará el sistema en usar la swap"
 echo "Introduce el valor que te interese (entre 0 y 100)"
read n
 numero=$(echo $n | grep "^[0-9]*$")
	if [ $numero ]
	  then
           sudo write "vm.swappiness=$n"  >> /etc/sysctl.conf
           val_swappiness
        else
           echo "El valor debe ser numérico y estar en el rango 0-100"
        fi
# pause
}

# Obtener entrada por teclado y elegir opción
function read_input(){
 local c
 echo
 read -p "Elige una opción [ 1 - 8 ] " c
 case $c in
  1) uso_memoria ;;
  2) val_swappiness ;;
  3) swap_off  ;;
  4) swap_up ;;
  5) swap_on ;;
  6) swappiness_ses ;;
  7) swappiness_per ;;
  8) echo ; echo "    FINALIZADO EL PROGRAMA." ; echo ; echo " Vigila la estabilidad del sistema!" ; banner $USER ; exit 0 ;;
  *)
   echo "Seleccione una sola opción entre 1 to 8."
   pause
 esac
}

# Programa principal
while true
do
 clear
  show_menu # mostrar memu
  read_input  # esperar la entrada del usuario
done

Si tienes algún comentario que hacer, al pie del post tienes un formulario para hacerlo.

Y si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, o te quieres suscribir para recibir un correo-e una vez al mes con las nuevas publicaciones, en la página de contacto, tienes otro formulario.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.