Check the new version here

Popular channels

Limpiar memoria RAM en Linux en solo unos comandos

A diferencia de Windows, donde se debe recurrir a programas para limpiar la RAM, es decir, luego de, 1 dia de un Windows iniciado, notamos que por mas que cerremos todo, la RAM no esta como iniciamos, sino un poco mas abultada.
Generalmente esos programas rompen cosas y provocan perdida de datos, o no funcionan, pero en Linux, si, y excelentemente. Además, no es un programa!, sino una funcion de kernel Linux.

Por defecto, la cache de RAM, la maneja el kernel, y no es necesario tocarla, pero si sos muy obsesivo y paranoico, como yo, te gustará ver la RAM, identica a como iniciaste el sistema, aun despues de haber tenido la PC prendida 1 dia o mas.

A partir del kernel 2.6.16 se introdujo esta caracteristica de la que hablaremos ahora.

La caché RAM, son "cosas" que quedan ahi, por si se necesitan luego, ejemplos de programas que generan que esto se "llene" son:

Chrome
Firefox
VirtualBox
Pidgin
Gimp
Apache

En el directorio /proc/sys/vm/ tenemos un fichero llamado drop_caches, que se encarga de decirle al kernel Linux que hacer con las caches RAM.

A veces, no solo es util en tu PC, sino en servidores, en ocasiones, el uso de java en Apache, consultas, etc, genera que la RAM se llene y no se vacie, si tenemos un pequeño server de 512 de RAM o menos, esto, nos va a salvar tener que reiniciar algun servicio o el server.

Primero que nada, voy a explicar los valores existentes y su definicion.

0: No libera nada, lo controla el kernel (asi viene por defecto al iniciar el sistema)
1: Libera la pagecache
2: Libera inodos y dentries
3: Libera inodos, pagecache y dentries (todo en uno)


Definicion:

pagecache: Memoria caché de la paginación.

dentries: (Directory Entries) Representa la relación de forma estructurada que existe entre directorios-archivos.

inodes: Son nodos índice de archivos y directorios que usa el Sistema de Archivos para administrar las actividades posibles de dichos archivos y directorios guardados en disco o memoria. Contiene la metadata de los archivos y directorios: permisos, tamaño, propietario, última fecha de acceso, creación, modificación, etc.

Ahora bien, hay dos formas de hacer esto, mediante sysctl o mediante un simple echo, la forma politicamente correcta, seria sysctl, la corta y facil, igual de efectiva y no dañina, es echo.

Antes de hacer esto, se recomienda usar el comando sync, para los que no saben, man sync, pero basicamente vuelca al disco todos los cambios que andan rondando en RAM, dado que Linux es un sistema asincrono, en lo que discos respecta, a menos que montemos las particiones de forma sincronica en /etc/fstab, cosa que reduce el rendimiento, sobre todo en Ext4.

Nos logueamos como root y hacemos:

#sync
#echo "0" > /proc/sys/vm/drop_caches
#sync
#echo "1" > /proc/sys/vm/drop_caches
#sync
#echo "2" > /proc/sys/vm/drop_caches
#sync
#echo "3" > /proc/sys/vm/drop_caches

Si leyeron bien, se habrán dado cuenta, que con la 3 hacemos todo, ok?.
La forma correcta, es con:

#sync
#sysctl vm.drop_caches=3

Ahora, si quieren, antes de seguir, hagan la prueba, inicien su PC, miren en htop la RAM consumida y anoten el valor, luego, abran Chrome, Firefox, miren un video en youtube, etc. Cierren todo y miren la RAM, veran un incremento. Ahora, abran un terminal, como root pongan:

#sync
#echo "3" > /proc/sys/vm/drop_caches

Vuelvan a mirar la RAM en htop, cambio no?.

Ahora, simplifiquemos esto, como?, un script, ponerlo en .bashrc me parece un exceso, ademas deberiamos abrir una terminal, lo mismo si lo ponemos en cron, es un exceso, asi que, creamos un script, de la siguiente forma.

Se loguean como root y:

nano /usr/local/bin/freeram (asi le pongo yo, ustedes le ponen como quieren, pepe, luis, liberaram)

y el contenido será:

#!/bin/sh
# Author: SynFLag
# Licence: GNU GPLv3
# Freeram is a script to clean the RAM caches
sync ; echo 3 > /proc/sys/vm/drop_caches ; echo "RAM Liberada"

exit 0

Salvan con ctrl+o y salen con crtl+x, luego, como root nuevamente:

chmod +x /usr/local/bin/freeram

Ahora, desde cualquier terminal, ponen:

$ sudo freeram (dado que necesita permisos de root), y listo, liberan la ram cuando desean o para los que no usan sudo, como yo
$ su -c "freeram"

Esto aplica a cualquier distro Linux con kernel 2.6.16 o superior
0No comments yet