Un indicador de terminal en una PC con Linux.

El freecomando de Linux muestra cuánta memoria de su computadora está en uso y cuánta todavía está disponible para que la utilicen los programas. Su resultado puede ser confuso para los no iniciados, pero le mostraremos cómo entenderlo.

El comando libre

El freecomando imprime un resumen rápido del uso de la memoria en una ventana de terminal. que no tiene muchas opciones o trucos bajo la manga, y no se necesita mucho tiempo y esfuerzo para aprender a usarlo. Sin embargo, aprender a interpretar correctamente la información que proporciona es otra historia. Es muy fácil confundirse con lo freeque te está diciendo.

En parte, esto se debe a la terminología, como la diferencia entre "gratis" y "disponible", y en parte se debe al funcionamiento interno de las rutinas de gestión de la memoria y del sistema de archivos del kernel de Linux. Si tiene memoria libre que el kernel puede hacer un buen uso, la tomará prestada para sus propios fines. Hasta que lo necesites de vuelta.

Vamos a sumergirnos en los mecanismos subyacentes y las rutinas de datos para que pueda apreciar lo que sucede debajo del capó y cómo todo esto afecta el uso de su memoria de acceso aleatorio (RAM).

Las columnas libres

Arranquemos freesin opciones y veamos qué obtenemos:

gratis

el comando gratuito en una ventana de terminal

Eso está envuelto de una manera fea. En su computadora, podrá estirar la ventana de la terminal. Aquí está el resultado en una tabla más ordenada:

        caché / beneficio compartido gratuito total usado disponible
Mem: 2038576 670716 327956 14296 1039904 1187160
Intercambio: 1557568 769096 788472

Las cifras se dan en kibibytes, que son 1024 bytes. En Manjaro, el freecomando tiene el alias free -mEsto obliga freea utilizar mebibytes, que son 1.048.576 bytes. En otras distribuciones, el valor predeterminado es kibibytes.

La línea superior informa sobre la memoria del sistema, la línea inferior informa sobre el espacio de intercambio. Presentaremos las columnas aquí, luego las veremos con más detalle en breve. Las columnas de la línea de memoria son las siguientes:

  • Total : la cantidad total de RAM física instalada en su computadora.
  • Usado : se calcula mediante Total- ( FreeBuffersCache).
  • Libre : la cantidad de memoria no utilizada. ¿Por qué no Total = Usado + Gratis? Lo explicaremos en breve.
  • Compartida : memoria que utiliza el tmpfssistema de archivos.
  • Buff / cache : memoria utilizada para búferes y caché.
  • Disponible : esta es una estimación de la memoria que está disponible para atender las solicitudes de memoria de las aplicaciones, cualquier otro software que funcione dentro de su computadora, como su entorno de escritorio gráfico y comandos de Linux.

Para la línea de intercambio, las columnas son:

  • Total : el tamaño de la partición de intercambio o del archivo de intercambio.
  • Usado : la cantidad de espacio de intercambio en uso.
  • Gratis : el espacio de intercambio restante (no utilizado)

La amplia pantalla

Para separar las Buff/cachefiguras en sus propias columnas, use la -wopción (ancho):

libre -w

free -w en una ventana de terminal

Este es el resultado. En lugar de una Buff/cachecolumna, obtenemos una Bufferscolumna y una Cachecolumna. Aquí están las cifras en una tabla:

        caché de búferes compartidos libres usados ​​total disponible
Mem: 2038576 683724 265708 14660 94568 994596 1160420
Intercambio: 1557568 761416 796152

Veamos qué representan las cifras de las columnas.

La columna total

Este es el sencillo. Es la cantidad de RAM que tienes instalada en tu placa base. Este es el valioso recurso por el que se pelean todos los procesos en ejecución. Al menos estarían peleando si el núcleo no estuviera arbitrando.

Por cierto, el lugar de donde freerecopila su información es el /proc/meminfopseudoarchivo. Puede echar un vistazo a este archivo usted mismo con el siguiente comando:

menos / proc / meminfo

less / proc / meminfo en una ventana de terminal

La salida es una lista única de nombres y valores.

Salida del comando less / proc / meminfo en una ventana de terminal

La columna usada

Aquí es donde comienza a ponerse interesante.

La Usedfigura representa lo que probablemente esperarías, además de muchas otras cosas. Esta es la memoria que se asigna a los procesos, la toman los programas de usuario y la utilizan cosas como los entornos de escritorio GNOME o KDENo hay sorpresas ahí. Pero también incluye las cifras BuffersCache.

La RAM que no se usa para algo es RAM desperdiciada. El kernel usa RAM de repuesto para almacenar cachés y búferes que le permiten operar de manera más eficiente. Por lo tanto, el kernel está utilizando esta RAM para algo, pero no para nada en el espacio del usuario.

Si se recibe una solicitud de memoria que solo se puede atender renunciando parte de la RAM que el kernel está usando para sus propios dispositivos, entonces eso es lo que sucede, sin problemas. Liberar esta RAM y usarla para otras aplicaciones no afectará el funcionamiento correcto de su sistema Linux, nada se romperá, pero podría afectar el rendimiento del sistema.

Entonces, esta columna realmente significa "toda la RAM que está en uso por algo, incluso si se puede recuperar instantáneamente".

La columna libre

Esta columna contiene la cifra de la cantidad de RAM que no está siendo utilizada por nada. Debido a que la Usedcolumna contiene las cifras de Buffers y Cache, no es raro que los sistemas Linux que funcionan perfectamente tengan muy poca RAM listada como "libre".

Eso no es necesariamente algo malo, y casi con certeza significa que tiene un sistema que funciona perfectamente y que regula el uso de la RAM correctamente. Es decir, la RAM está siendo utilizada por aplicaciones y otros procesos de espacio de usuario y por el kernel en sus esfuerzos por hacer que el rendimiento de su computadora sea lo mejor posible.

La columna compartida

La figura de la Sharedcolumna representa la memoria dedicada a  tmpfs almacenar sistemas de archivos basados ​​en RAMSe trata de sistemas de archivos que se crean en memoria para facilitar el funcionamiento eficiente del sistema operativo. Para ver qué tmpfssistemas de archivos están presentes, use el df comando.

Las opciones que estamos usando son:

  • -h (humano): Utilice unidades sensatas y que mejor se ajusten.
  • --total: Muestra una línea con los totales en la parte inferior de la salida.
  • --type=tmpfs: Informe únicamente sobre los tmpfssistemas de archivos.
df -h --total --type = tmpfs

df -h --total --type = tmpfs en una ventana de terminal

Lo primero que te llama la atención cuando miras esos valores es que son muchas veces más grandes que la cifra de la Sharedcolumna. Los tamaños que se muestran aquí son los tamaños máximos de estos sistemas de archivos. En realidad, cada uno solo ocupa la memoria que necesita. La cifra de la Sharedcolumna es la que se cree para el uso de la memoria.

¿Qué contienen estos sistemas de archivos? Aquí hay un desglose rápido:

  • / run : contiene muchos archivos temporales, como archivos PIDregistro en diario de systemd que no tiene que conservarse en los reinicios, información relacionada con sockets de dominio UnixFIFO y la gestión de demonios.
  • / dev / shm : Esto permite la implementación de la gestión de memoria compatible con POSIX en Debian y distribuciones de Linux derivadas de Debian.
  • / run / lock : contiene archivos de bloqueo. Estos se utilizan como indicadores para que el sistema sepa que un archivo u otro recurso compartido está en uso. Contienen el PID del proceso que utiliza ese recurso.
  • / sys / fs / cgroup : este es un elemento central del esquema que administra los grupos de controlLos procesos se organizan en grupos jerárquicos según los tipos de recursos que utilizan. Permite monitorizar y limitar el uso de los recursos por parte de los procesos.
  • / run / user / 121 : esta es una carpeta creada por pam_systemd para almacenar archivos temporales para un usuario. En este caso, el usuario tiene un ID de 121. Tenga en cuenta que el "usuario" puede ser un usuario normal, un demonio o algún otro proceso.
  • / run / user / 1000 : esta es una carpeta createdde pam_systemd para almacenar archivos temporales para este usuario, que tiene el ID de usuario 1000. Este es el usuario actual, usuario dave.

Las columnas de búfer y caché

Las  columnas BufferCachesolo aparecen si ha utilizado  -w(ancho). Sin la wopción , las cifras de estas dos columnas se combinan en la Buff/cachecolumna.

Estas dos áreas de la memoria interactúan y dependen una de la otra. El área de caché contiene (principalmente) datos que se han leído del disco duroSe conserva en caso de que necesite acceder a él nuevamente. Es más rápido hacerlo extrayendo esos datos del caché que leyéndolos del disco duro. La caché también puede contener datos que se han modificado pero que aún no se han vuelto a escribir en el disco duro, o valores que se han calculado y aún no se han guardado en un archivo.

Para realizar un seguimiento de los diversos fragmentos de archivos y alijos de datos, el kernel crea un índice en el área de memoria caché, en el área de memoria intermedia. Los búferes son partes de la memoria que contienen bloques de disco y otras estructuras de información. Estos contienen datos sobre los datos que se almacenan en el área de la memoria caché. Entonces, los búferes son metadatos para el caché.

Cuando se realiza una solicitud de lectura de archivo, el kernel lee los datos en las estructuras de datos del búfer en busca del archivo o fragmento de archivo que se ha solicitado. Si se encuentra, la solicitud se atiende desde el área de la memoria caché a la que apuntan las estructuras de datos del búfer. Si no está presente en el caché, y por lo tanto no está en los metadatos del área de memoria intermedia, el archivo se lee desde el disco duro.

Las estructuras en el área de la memoria intermedia son:

  • Cabezas de búfer: cada búfer se describe en un bloque de datos denominado cabezal de búferAdemás, si los datos del bloque se modifican y la página de memoria asociada se "ensucia", el descriptor rastrea la necesidad de volver a escribir los datos en el disco duro.
  • Inodos : Los inodos contienen metadatos sobre archivos y directorios, incluido dónde se encuentran en el disco duro (o sistema de archivos virtual), el tamaño del archivo y las marcas de tiempo del archivo.
  • Dentries : Una dentry (entrada de directorio) es una estructura que contiene información de listas de directoriosPiense en ellos como una lista de inodos para los archivos y directorios dentro de un directorio.

Puede ver por qué tiene sentido condensar la memoria utilizada para el búfer y las áreas de memoria caché en una sola Buff/cachecolumna. Son como dos partes de la misma cosa. El área de la memoria caché sería inútil sin el área de la memoria intermedia que proporciona un índice de su contenido.

La columna disponible

La columna disponible es la suma de la Freecolumna más las porciones de las Bufferscolumnas y Cache (o la Buff/cachecolumna) que se pueden ceder inmediatamente . La Availablecolumna es una estimación, no una cifra exacta. Es una estimación informada y precisa, pero no debe tomarse como precisa hasta el último byte.

Cambio de las unidades de visualización

Para cambiar las unidades en las que se muestran las cifras de forma gratuita, utilice una de las siguientes opciones.

  • -b : muestra los valores en bytes.
  • -k : muestra los valores en kibibytes (que es el predeterminado).
  • -m : muestra los valores en mibibytes.
  • -g : muestra los valores en gibibytes.
  • -h : muestra los valores en unidades sensibles de mejor ajuste (legibles por humanos).

Por ejemplo, para usar valores legibles por humanos, use la -hopción:

libre -h

free -h en una ventana de terminal

freeutilizará la unidad más adecuada para cada valor. Como puede ver, algunos de los valores se muestran en MiB y algunos de ellos están en GiB.

Visualización de un total

La --totalopción causa libre para mostrar una línea total, que suma los valores de las TotalUsedFreecolumnas de la Mem y Swaplíneas.

gratis -h --total

free -h --- total en una ventana de terminal

La opción de contar

La -copción (contar) indica freeque se ejecute una determinada cantidad de veces, con una pausa de un segundo entre cada una. Para freeejecutar dos veces, use este comando:

libre -h -c 2

free -h -c 2 en una ventana de terminal

Corriendo gratis continuamente

Si desea ver el efecto que tiene una determinada aplicación en el uso de la memoria, puede ser útil tenerla en freeejecución continuamente. Esto le permite ejecutar freeen una ventana de terminal mientras inicia, usa y luego cierra la aplicación que está investigando.

La -sopción (segundos) determina la duración de la pausa entre cada ejecución de freePara tener una ejecución libre de forma continua con una pausa de tres segundos entre cada actualización, use este comando:

gratis -s 3

free -s 3 en una ventana de terminal

Presione Ctrl+Cpara detener el proceso y regresar al símbolo del sistema.

Combinando las opciones Count y Seconds

Para freeejecutar con una pausa específica entre cada actualización, pero detenerse después de una cierta cantidad de informes, combine las opciones -s(segundos) y -c(recuento). Para freeejecutar cinco veces con una pausa de dos segundos entre cada actualización, use este comando:

gratis -s 2 -c 5

free -s 2 -c 5 en una ventana de terminal

Una vez que han aparecido las cinco actualizaciones, el proceso finaliza automáticamente y vuelve al símbolo del sistema.

autoterminación del comando free -s 2 -c 5 en una ventana de terminal

Separación de memoria alta y baja

Esto es de poca utilidad hoy en día, pero si está ejecutando Linux en una computadora de 32 bits, podría resultar útil. Separa el uso de memoria de memoria baja y memoria alta.

En un sistema operativo basado en Linux de 32 bits, la CPU puede utilizar un máximo de 4 GB de memoria. La memoria se divide en memoria baja y memoria alta. La memoria baja se asigna directamente a la parte del kernel del espacio de direcciones. La memoria alta no tiene mapeo directo del kernel. La memoria alta suele estar por encima de 896 MB.

Esto significa que el propio kernel (incluidos sus módulos activos) solo puede hacer uso de poca memoria. Los procesos de usuario, cualquier cosa que no sea el núcleo en sí, pueden potencialmente hacer uso de memoria baja y alta.

En una computadora de 64 bits, no se mostrarán valores para memoria alta:

libre -h -l

free -h -l en una ventana de terminal

Los recuerdos están hechos de esto

Un resumen rápido:

  • Total : la cantidad de RAM instalada en su sistema.
  • Usado : Igual a Total- ( FreeBuffersCache).
  • Gratis : la cantidad de memoria que nada ha utilizado por completo.
  • Compartido : memoria ocupada por los tmpfssistemas de archivos.
  • Búfer : las estructuras de datos que se mantienen para proporcionar un índice para todo lo almacenado en Cache.
  • Caché : datos leídos del disco duro, datos modificados que esperan volver a escribirse en el disco duro y otros valores calculados.
  • Disponible : lo que es realmente gratis. Una estimación de la memoria en FreeBufferCacheque podría usarse para satisfacer una solicitud de memoria.