Comprendiendo el uso de memoria en Linux una mirada al comando free

Escrito el 2023-05-15 por Alberto Ferrer
Tiempo de lectura: 4 minuto(s)
Etiquetas: linux memoria free procps

El sistema operativo Linux tiene una serie de comandos útiles y poderosos para monitorear y gestionar el uso de los recursos del sistema. Uno de estos comandos es free, que proporciona información sobre el uso de la memoria física y de intercambio (swap) en el sistema. Pero, ¿qué significan realmente los datos que muestra este comando?

    [alberto@bastion ~]$ free -h
                   total        used        free      shared  buff/cache   available
    Mem:           3.8Gi       703Mi       443Mi        31Mi       3.0Gi       3.1Gi
    Swap:          2.0Gi        21Mi       2.0Gi
    [alberto@bastion ~]$

Desglose del comando free

Veamos cada uno de los términos del comando free -h:

  • total: Es la cantidad total de memoria RAM física en tu sistema. En otras palabras, es la capacidad total de memoria que tu sistema tiene para alojar y ejecutar programas y procesos. Puedes encontrar más información sobre esto en la documentación de administración de memoria de Linux (en inglés).

  • used: Es la cantidad de memoria RAM que está siendo utilizada actualmente por tus programas y procesos. Este concepto se discute en varias partes de la documentación de administración de memoria de Linux (en inglés).

  • free: Es la cantidad de memoria RAM que no se está utilizando en absoluto. Esta es la memoria que actualmente no está siendo usada por nada, incluyendo el kernel o cualquier programa de espacio de usuario. Consulta free(1) - Linux man page (en inglés) para obtener más detalles.

  • shared: Es la memoria que se comparte entre procesos. Puedes encontrar más información en la sección de Memoria Compartida de la documentación de administración de memoria del kernel de Linux (en inglés).

  • buff/cache: Es la memoria utilizada por el kernel para propósitos como el almacenamiento en caché de archivos y la amortiguación de operaciones de entrada/salida. Puedes aprender más sobre esto en la documentación de almacenamiento en caché del kernel de Linux (en inglés).

  • available: Es una estimación de cuánta memoria está disponible para iniciar nuevas aplicaciones, sin recurrir al intercambio (swap). La columna de memoria 'disponible' fue añadida a la salida del comando free en la versión 'procps-ng' 3.3.10. Este cambio se hizo para proporcionar una mejor indicación de cuánta memoria está disponible para iniciar nuevas aplicaciones. Más sobre esto se puede encontrar en las notas de la versión para procps-ng 3.3.10 (en inglés).

Ejemplo practico:

El siguiente script de bash te permitirá obtener estadísticas de la memoria en tu sistema Linux:

    #!/usr/bin/env bash

    # Obtén la memoria total
    mem_total=$(free -m | awk 'NR==2{printf "%s", $2 }')

    # Obtén la memoria disponible
    mem_disponible=$(free -m | awk 'NR==2{printf "%s", $7 }')

    # Verifica si bc está instalado
    if command -v bc &> /dev/null
    then
        # Calcula el porcentaje de memoria usada con bc si está disponible
        porcentaje_usado=$(echo "scale=2; (1 - $mem_disponible/$mem_total)*100" | bc)
    else
        # De lo contrario, usa aritmética de enteros de bash
        porcentaje_usado=$((100*(mem_total - mem_disponible)/mem_total))
    fi

    echo "Memoria Total : $mem_total MB"
    echo "Memoria Disponible : $mem_disponible MB"
    echo "Porcentaje de Memoria Usada : $porcentaje_usado %"

Por favor, ten en cuenta que este script solo proporciona una visión básica de las estadísticas de memoria. Dependiendo de tus necesidades, es posible que desees recoger más estadísticas o presentar los resultados de una manera diferente.

Lo cual nos daría como salida lo siguiente:

    [alberto@bastion ~]$ ./memory_report.sh 
    Memoria Total : 3916 MB
    Memoria Disponible : 3171 MB
    Porcentaje de Memoria Usada : 20.00 %
    [alberto@bastion ~]$ 

¿Por qué es importante entender esto?

La gestión de la memoria es un aspecto crítico de cualquier sistema operativo. Linux, en particular, utiliza una variedad de técnicas avanzadas para aprovechar al máximo la memoria física disponible. Por ello, entender cómo Linux utiliza y administra la memoria puede ser útil para optimizar el rendimiento del sistema, para solucionar problemas y para tomar decisiones informadas sobre la configuración del sistema.