liberamemoria.sh
liberamemoria.sh
Este script comprueba memoria libre y, si baja de un umbral, fuerza la liberacion de caches del kernel Linux.
Uso en la infraestructura
Se usa como mantenimiento preventivo en hosts con poca RAM o servicios que generan presion de cache.
| Rol | Servicio | Impacto si falla |
|---|---|---|
| Mantenimiento RAM | Host Linux | No se libera cache en momentos de presion |
| Soporte cron | Nextcloud/libra | Puede aumentar swap o latencia del host |
| Diagnostico | Sistema base | No identifica fugas reales de memoria |
Debe verse como alivio puntual, no como sustituto de dimensionar memoria o corregir procesos consumidores.
Ejecucion programada
@hourly /ruta/origen/scripts/liberamemoria.sh
Flujo
- Obtiene memoria libre con
free -m. - Compara el valor con un umbral en MB.
- Si la memoria libre es inferior o igual al umbral, escribe
3en/proc/sys/vm/drop_caches.
Script original
1
2
3
4
5
6
7
8
9
#!/bin/bash
MEMORIA=$(free -m|grep Mem|awk '{print $4}')
LIBERAMEMORIA=sh /bin/echo 3 > /proc/sys/vm/drop_caches
#echo $MEMORIA
if [[ $MEMORIA -le 6144 ]]
then
$LIBERAMEMORIA
#else echo $MEMORIA
fi
Version revisada
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env bash
set -euo pipefail
UMBRAL_MB="${UMBRAL_MB:-6144}"
MEMORIA_LIBRE="$(free -m | awk '/^Mem:/ {print $4}')"
if (( MEMORIA_LIBRE <= UMBRAL_MB )); then
sync
echo 3 > /proc/sys/vm/drop_caches
fi
Riesgos y mejoras
- Requiere permisos de root.
drop_cachesno soluciona fugas de memoria; solo libera caches recuperables.- Conviene registrar ejecuciones en log para detectar frecuencia excesiva.
- La version original intenta guardar un comando en una variable de forma incorrecta; mejor ejecutar
syncyechodirectamente.
Cambios y motivo
| Cambio | Motivo |
|---|---|
ejecutar sync y echo directamente | la redireccion a /proc/sys/vm/drop_caches no funciona bien guardada en variable |
| umbral configurable | permite adaptar el script a hosts con distinta RAM |
| log opcional | facilita saber cuantas veces se dispara |
Variante nextcloud_scripts
En micron_nextcloud aparece una variante del script con umbral de 2048 MB y log diario. El patron recomendado es mantener el umbral parametrizable:
1
UMBRAL_MB="${UMBRAL_MB:-2048}"
La tarea se ejecuta varias veces al dia desde micron_nextcloud para reducir presion de memoria en el host Nextcloud.
Variante libra_scripts
La variante de libra_scripts usa un umbral de 512 MB. Es util como ejemplo minimo, pero conviene ejecutar sync y drop_caches directamente en lugar de intentar guardar la redireccion en una variable.