# rm-rf.es

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 utilizar 4GB de RAM o más en CentOS /RHEL / Fedora

Si tienes un equipo con 4GB de RAM o más instalados, y monta un sistema operativo GNU/Linux CentOS/RHEL/Fedora probablemente veas que al mostrar la cantidad de RAM de la que dispone el sistema no llega a mostrar más de 3.3 GB aproximadamente.

Para permitir que nuestro sistema sea compatible con una capacidad de memoria RAM igual o superior a 4GB tenemos que instalar un kernel compilado de forma especial para ello (PAE kernel). La forma de hacerlo es sencilla:

yum install kernel-PAE

Una vez instalado, reiniciamos el sistema y con el comando uname -a comprobamos si ya estamos utilizando el nuevo kernel, y con el comando free verificamos que efectivamente la memoria RAM que detecta el sistema es la correcta.

Linux: Listar procesos por % cpu o uso de memoria

Con estas dos secuencias de comandos podréis ver de un modo rápido y sencillo los procesos ordenados por uso (%) de CPU y memoria. Por supuesto no es necesario (ni práctico) escribir el comando completo en la shell cada vez que lo queráis ejecutar, os recomiendo crear un alias específico para cada uno de ellos.

Listar procesos por % cpu, veréis que eliminamos aquellos que usan 0.0 de CPU con sed (sed ‘/^ 0.0 /d):

ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed '/^ 0.0 /d'

Ejemplo:

$ ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed '/^ 0.0 /d'
%CPU CPU  NI S     TIME COMMAND
0.2   -   0 S 00:00:24 metacity
0.2   -   0 S 00:00:00 /usr/bin/python /usr/bin/terminator
0.2   -   0 S 00:00:28 gnome-screensaver
0.2   -   0 S 00:00:31 gnome-panel
4.6   -   0 S 00:08:23 /usr/bin/pulseaudio --start
7.4   -   0 S 00:13:24 /usr/X11R6/bin/X :0 -br -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7
7.5   -   0 S 00:04:31 rhythmbox
14.4   -   0 S 00:08:50 /usr/lib/firefox-3.5.4/firefox-3.5

Listar procesos por uso de memoria (en KB):

ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS

Ejemplo (reducido):

$ ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS
23964 gnome-panel
26168 nautilus
26256 /usr/bin/python /usr/bin/terminator
58340 /usr/X11R6/bin/X :0 -br -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7
58728 rhythmbox
128736 /usr/lib/firefox-3.5.4/firefox-3.5

Encontrado en pixelbeat

Xen: Reducir cantidad de memoria reservada para Dom0

Por defecto, creo recordar que Xen reserva 256 MB de memoria RAM para el domain0. Esto puede suponer un problema en equipos con poca memoria. En el caso por ejemplo de querer añadir una máquina virtual con 256 MB en un sistema con 512 MB, es probable que salte un error similar a este:

Error: Error creating domain: I need XX MiB, but dom0_min_mem is XX and
shrinking to XX MiB would leave only XX MiB free.

Bien, no hay problema porque podemos reducir si lo deseamos la memoria reservada para el dom0. En el fichero de configuración xend-config.sxp podemos modificar este parámetro y adecuarlo a nuestras necesidades:

# Dom0 will balloon out when needed to free memory for domU.
# dom0-min-mem is the lowest memory level (in MB) dom0 will get down to.
# If dom0-min-mem=0, dom0 will never balloon out.
(dom0-min-mem 256)

Cambiad 256 por el valor que deseéis y reiniciar xend para reflejar los cambios (ahora mismo desconozco si hay otra forma de hacerlo sin tener que reiniciar el servicio).

Cómo usar 4Gb de RAM o más en Debian

En distribuciones 32-bit de Debian no es posible utilizar más de 3Gb de memoria RAM, la solución más sencilla es instalar desde el gestor de paquetes APT un kernel que sí lo soporta, concretamente el kernel con el sufijo bigmem.

En mi caso estaba utilizando un kernel 2.6 así que instalé el siguiente

linux-image-2.6-686-bigmem
apt-get install linux-image-2.6-686-bigmem

Reiniciamos y solucionado, ya podemos utilizar 4Gb de RAM o más en nuestro sistema.

Fuente: www.debianadmin.com

El comando Free

El comando Free en Linux muestra la cantidad de memoria libre y usada que tiene el sistema. Por una parte muestra la memoria física y por otra la swap, también muestra la memoria caché y de buffer consumida por el Kernel.

No es necesario pasarle ningún parámetro al comando para ver su funcionalidad:

$ free
             total       used       free     shared    buffers     cached
Mem:        514796     503800      10996          0       9208     184804
-/+ buffers/cache:     309788     205008
Swap:      1510036      38252    1471784

No obstante, puede ser personalizado con los siguientes parámetros:

-b, –bytes
Muestra la salida en bytes.
-k, –kb
Muestra la salida en kilobytes (KB). Es el resultado por defecto.
-m, –mb
Muestra la salida en megabytes (MB).
-g, –gb
Muestra la salida en gigabytes (GB).
-l, –lowhigh
Muestra información detallada acerca de la utilización baja y alta de memoria.
-o, –old
Muestra el formato antiguo, sin -/+ buffers/cache.
-t, –total
Muestra un resumen del total de memoria física y swap.
-c n, –count=n
Refrescará la información n veces y luego saldrá del programa.
-s n, –repeat=n
Repetición, pausando n segundos entre una y otra
-V, –version
Muestra la versión de free y sale.
–help
Muestra la ayuda y sale.