¿Cuánta memoria tiene mi máquina? (GNU/Linux)

memoryEn algunas ocasiones necesitamos saber qué memoria tiene nuestra máquina o servidor y a qué frecuencia está funcionando. Aunque influyen otros factores, estos son parámetros que necesitaremos conocer en el caso de, por ejemplo, querer ampliar la cantidad de memoria con la que contamos.

En Linux, existen varios comandos que pueden resultarnos especialmente útiles en casos como este:

Comando free

Este sencillo comando nos permitirá de forma rápida ver cuánta memoria tenemos, y cuánta hay ocupada actualmente.  Por ejemplo, en una máquina con 12 GB de RAM tendríamos la siguiente salida:

Pero a simple vista la información es algo confusa, y esto es debido a que la salida por defecto de este comando se muestra en Kilobytes, siendo una salida idéntica a si ejecutásemos el comando con la opción “-k”.

Este comando, soporta diferentes parámetros de visualización que hacen la salida más intuitiva. Entre ellas están “-m” (Megabytes) y “-g” Gigabytes). Ejemplo:

 

Bonus: Y si lo lanzamos en una máquina con 1 Terabyte de RAM…

Comando vmstat

Este comando es parecido a free, pero su uso está más orientado a la estadística de uso de memoria, tanto física como virtual. Si lo usamos sin ningún parámetro muestra lo siguiente:

Donde podemos ver por columnas ciertos valores como memoria libre, memoria swap, procesos en ejecución, etc. Esta opción a simple vista puede ser algo confusa y poco más útil que la salida del comando free, por lo que el uso clásico que se le da a herramienta suele ser con la opción  “-s”, la cual nos muestra las estadísticas detalladas de uso de la memoria (de todos los tipos de memoria del sistema de hecho):

Además, para facilitar la lectura podemos añadirle también el parámetro “-S M” para que nos muestre la información en Megabytes:

 

Comando lshw

El comando lshw es algo más avanzado y su funcionamiento es similar al clásico “ls” para listar el contenido de una carpeta, pero enfocado al hardware presente en la máquina. La mayoría de las distribuciones no lo incluyen por defecto. Por tanto sería necesario instalarlo previamente. Para ello:

En caso de que nuestra máquina sea Ubuntu/Debian

Y en caso de ser CentOS/RedHat

Una vez instalado este sencillo pero completo comando, podemos utilizarlo para encontrar información muy útil.

Si ejecutamos un simple “lshw” encontraremos una salida completa, con mucha información detallada sobre todo el hardware de la máquina. Pero centrándonos en el tema de artículo, si quisiésemos conocer, por ejemplo, cuántos módulos de memoria tenemos actualmente y su frecuencia, bastaría con hacer lo siguiente (tened en cuenta que puede tardar unos segundos en recopilar la información):

En la salida del comando, podemos ver en las líneas resaltadas que contamos con 4 slots en los que podemos meter módulos de memoria, de los cuales 3 están vacíos (etiquetados como “[empty]“) y contamos con un módulo de 4 GigaBytes DDR3 a 1333 MHz.

Bonus: Y si lo lanzamos en una máquina con 1 Terabyte de RAM…

Comando dmidecode

Este comando es algo especial, ya que obtiene la información directamente del DMI (Direct Media Interface), que no es más que un enlace entre el dos puntos clave en una placa base: el northbridge (elemento de enlace entre CPU, RAM y PCI-Express) y el southbridge (enlace entre BIOS, PCI y dispositivos de entrada/salida).

Como a dmidecode podríamos dedicar una entrada completa del blog, vamos a limitarnos a cómo obtener información de la memoria. Este comando  si lo ejecutamos tal cual, muestra toda la información por pantalla, pero si queremos ser específicos podemos solicitarlo:

De esta forma obtendríamos una salida detallada con la información que dmidecode es capaz de obtener de nuestra memoria, indicando información curiosa como la ubicación de cada módulo, fabricante, tipo de memoria, velocidad, número de serie, capacidad máxima del sistema, etc. Por ejemplo, en la máquina con 12 GB de RAM de antes:

 

Herramienta hwloc

Y dejamos para el final toda una joya: hwloc. Este conjunto de herramientas soporta infinidad de posibilidades para conocer el hardware de una máquina, hasta el punto de ser capaz de mostrar la topología hardware de la máquina. Una vez que se instala esta herramienta, tendremos acceso a una serie de comandos muy útiles en el sistema, como puede ser lstopo. Ejecutándolo “a secas”, la salida directa de este comando es la siguiente (para la máquina de 1 TB de RAM):

Pero lo mejor es que… ¡podemos mostrar de forma gráfica esta información! De forma resumida (ya que al igual que con dmidecode podríamos dedicar otro post íntegro a hwloc) podríamos  simplemente hacerlo de la siguiente forma:

Obteniendo la siguiente maravilla:

supernode hwloc

Podríamos simplemente indicar otra extensión entre las soportadas (FIG, PDF, PNG, XML, SVG, PS y TXT) y lo tendríamos en ese formato. Rápido, fácil y útil, ¿verdad? 😉

 

Otros comandos clásicos: top y htop

Por último, existen otros comandos más ampliamente conocidos y que no podemos olvidar, como son top y htop, que también nos darán de una forma más interactiva bastantes más datos.

top es una versión interactiva del comando ps (ya dedicaremos algún artículo a gestión de procesos más adelante :)). Mostrará una lista de tareas interactiva, con alguna información genérica de la máquina. Por ejemplo, esta sería la salida del comando top de la máquina de cómputo con 1 TB de RAM, en uso por parte de dos usuarios:

Y para finalizar, htop es algo así como la versión fashion de top, con funcionalidades añadidas para facilitar la gestión de procesos. Su salida gráfica interactiva se muestra en la siguiente imagen (difuminando la información sensible):

htop