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 sobre este artículo, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en el pie de la página o desde aquí mismo.