Una ventana de terminal en un sistema Linux de estilo Ubuntu.

Hay muchas formas de obtener información sobre el uso de la memoria dentro de su sistema Linux. En este resumen, vamos a cubrir los métodos de línea de comandos más comúnmente utilizados:  freevmstat, y topTambién veremos la lectura /proc/meminfodirectamente.

Cómo Linux usa la RAM

La RAM es un recurso finito del que todos los procesos, como las aplicaciones y los demonios, quieren una parte. Hay mucho disponible. El kernel evalúa las disputas de memoria y asigna la memoria racionada a todos los procesos hambrientos. Es como una ave madre con más picos abiertos apuntando hacia ella de lo que tiene la larva.

La RAM no utilizada es RAM desperdiciada. Linux usa cualquier RAM de repuesto  para cosas como espacio de búfer de archivos, para mantener su computadora funcionando a un rendimiento óptimo. Es fácil tener la impresión de que la RAM de su sistema ha sido consumida por algún proceso fuera de control o una fuga de memoria, pero rara vez es el caso.

Por lo general, es solo el kernel haciendo su trabajo tenazmente en segundo plano. Si hay otras demandas de RAM que el kernel ha robado para sus propios dispositivos, cede la memoria instantáneamente, por lo que no hay daño.

Si el kernel decide que es más eficiente comenzar a usar el espacio de intercambio, también lo pone en juego. Hay mucha confusión sobre el swappinessvalor en Linux y cuándo el kernel comenzará a usar swapNo es cierto que el swappinessvalor establezca un umbral para el uso de RAM que active el intercambio para habilitarlo.

Pero ahora, veamos las diferentes técnicas que puede usar en la ventana del terminal para ver el uso de RAM en su computadora Linux.

El comando libre

El comando gratuito le brinda una tabla de la RAM total, usada, libre, compartida, búfer / caché y disponible en su computadora. También muestra la cantidad total de espacio de intercambio configurado y cuánto se usa y está disponible.

En nuestro ejemplo, usaremos la -mopción (mebibytes). Sin embargo, también puede usar  -b(bytes), -k(kibibytes) o -g(gibibytes).

Escribimos el siguiente comando:

libre -m

El comando "free -m" en una ventana de terminal.

Esta es la salida que obtenemos:

      caché / beneficio compartido gratuito total usado disponible
Mem: 1987901 95 80990811
Permuta: 1521651869

Las Memcolumnas contienen la siguiente información:

  • Total : la cantidad total de RAM física en esta computadora.
  • Usado : La suma de Free + Buffers + Cache restado de la cantidad total.
  • Libre : la cantidad de memoria no utilizada.
  • Compartida : cantidad de memoria utilizada por los tmpfssistemas de archivos.
  • Buff / cache : cantidad de memoria utilizada para búferes y caché. Esto puede ser lanzado rápidamente por el kernel si es necesario.
  • Disponible : esta es una estimación de la memoria disponible para atender solicitudes de memoria de aplicaciones y cualquier otro software operativo en su computadora.

Las Swapcolumnas contienen la siguiente información:

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

También puede usar el siguiente truco ingenioso que modificamos de uno de nuestros lectores para ver el porcentaje de espacio de intercambio que se usa:

libre -m | grep Swap | awk '{imprimir ($ 3 / $ 2) * 100}'

El comando "free -m | grep Swap | awk '{print ($ 3 / $ 2) * 100}'" en una ventana de terminal.

El comando vmstat

Es imposible tener una buena comprensión de la forma en que se usa la RAM en su caja de Linux sin una apreciación del estado de su espacio de intercambio. La RAM y el espacio de intercambio funcionan en estrecha colaboración.

Puede usar el vmstatcomando  para profundizar en cómo se está utilizando su espacio de intercambio (o memoria virtual). Le brinda un informe sobre una variedad de estadísticas relacionadas con el intercambio  basado en los valores promedio desde el último reinicio.

Escriba lo siguiente:

vmstat

El comando "vmstat" en una ventana de terminal.

Esta es la salida sin la envoltura:

procs ----------- memoria ---------- --- intercambio-- ----- io ---- -sistema-- ------ cpu -----
rb swpd caché de buff gratis si así bi bo en cs us sy id wa st
3 0 671488 576084 51088 823876 1 7 53 62 99 14 4 1 95 0 0

Hay muchos puntos de datos en ese informe, por lo que los desglosaremos:

  • Proc:
    • r : El número de procesos "ejecutables". Están en ejecución o esperando su próxima ráfaga de ciclos de CPU divididos en el tiempo.
    • b : El número de procesos en suspensión ininterrumpida. No están durmiendo, sino realizando una llamada al sistema de bloqueo. No pueden ser interrumpidos hasta que completen su acción actual. Normalmente, este proceso es un controlador de dispositivo que espera que algún recurso esté disponible. Cualquier interrupción en cola para ese proceso se maneja cuando el proceso reanuda su actividad habitual.
  • Memoria:
    • swpd : La cantidad de memoria virtual utilizada, es decir, cuánta memoria se ha intercambiado.
    • free : la cantidad de memoria inactiva (no utilizada).
    • buff : la cantidad de memoria utilizada como búfer.
    • caché : la cantidad de memoria utilizada como caché.
  • Intercambiar:
    • si : la cantidad de memoria virtual intercambiada desde el espacio de intercambio.
    • entonces : la cantidad de memoria virtual intercambiada para intercambiar espacio.
  • IO:
    • bi : Bloques de entrada. El número de bloques de datos utilizados para intercambiar la memoria virtual de nuevo a la RAM.
    • bo : Bloquea. El número de bloques de datos que se utilizan para intercambiar la memoria virtual de la RAM al espacio de intercambio.
  • Sistema:
    • in : el número de interrupciones por segundo, incluido el reloj.
    • cs : el número de cambios de contexto por segundo. Un cambio de contexto es cuando el kernel cambia del procesamiento del sistema al modo de usuario.
  • CPU:  estos valores son todos porcentajes del tiempo total de CPU:
    • us : tiempo empleado en ejecutar código de usuario (no kernel).
    • sy : tiempo dedicado a ejecutar el código del kernel.
    • id : tiempo de inactividad.
    • wa : tiempo dedicado a la espera de entrada o salida.
    • st : El tiempo que una máquina virtual tiene que esperar a que el hipervisor termine de dar servicio a otras máquinas virtuales antes de que pueda regresar y atender esta máquina virtual.

El mando superior

El topcomando muestra una pantalla repleta de información. Los valores se actualizan cada pocos segundos.

Para usarlo, escribimos lo siguiente:

parte superior

El comando "top" en una ventana de terminal.

Se presionó la tecla “e”. Esto cambió la visualización a megabytes, que son más fáciles de analizar visualmente que las cadenas largas que representan bytes. Hay cinco líneas de información en la parte superior de la pantalla y un panel inferior con columnas de datos.

Aquí está la información que encontrará en cada línea:

  • Línea uno: El tiempo, cuánto tiempo ha estado funcionando la computadora, cuántas personas han iniciado sesión y cuál ha sido el promedio de carga durante los últimos uno, cinco y 15 minutos.
  • Línea dos: la cantidad de tareas y sus estados: en ejecución, detenidas, durmiendo o zombies.
  • Línea tres: información de la CPU (consulte el desglose de los campos a continuación).
  • Línea cuatro:  la cantidad total de memoria física y la cantidad disponible, utilizada, almacenada en búfer o en caché.
  • Línea cinco: Cantidad total de memoria de intercambio y cuánto está libre, usada y disponible (teniendo en cuenta la memoria que se espera que sea recuperable de los cachés).

Los campos de la CPU en la línea tres son los siguientes:

  • us: tiempo que la CPU dedica a ejecutar procesos para los usuarios en el espacio de usuario.
  • sy: tiempo que la CPU dedicó a ejecutar los procesos del "espacio del núcleo" del sistema.
  • ni: tiempo que la CPU dedicó a ejecutar procesos con un valor agradable establecido manualmente.
  • id: tiempo de inactividad de la CPU.
  • wa: tiempo que la CPU dedica a la espera de que se complete la E / S.
  • hi: tiempo que la CPU dedicó al mantenimiento de las interrupciones de hardware.
  • si: tiempo que la CPU dedicó a dar servicio a las interrupciones del software.
  • st (tiempo de robo): tiempo que la CPU perdió debido a la ejecución de máquinas virtuales.

Es posible que deba presionar las teclas de flecha izquierda o derecha para ver todas las columnas. Los valores de cada columna se describen a continuación:

  • PID: ID de proceso.
  • USUARIO: Nombre del titular del proceso.
  • PR: Prioridad del proceso.
  • NI: El buen valor del proceso.
  • VIRT: Memoria virtual utilizada por el proceso.
  • RES: Memoria residente utilizada por el proceso.
  • SHR: memoria compartida utilizada por el proceso.
  • S: Estado del proceso. (Consulte la lista de valores que este campo puede tomar a continuación).
  • % CPU: el porcentaje de tiempo de CPU utilizado por el proceso desde la última actualización.
  • % MEM:  La parte de memoria física utilizada.
  • TIEMPO +:  tiempo total de CPU utilizado por la tarea en centésimas de segundo.
  • COMANDO:  El nombre o línea del comando (nombre + opciones). (Esta columna está fuera de la pantalla a la derecha en la imagen de arriba).

El estado que se muestra en la Scolumna puede ser uno de los siguientes:

  • D: Sueño ininterrumpido.
  • R: Corriendo.
  • S: Durmiendo.
  • T: Trazado (detenido).
  • Z: Zombi.

Presione Q para salir  top.

Lectura / proc / meminfo

Muchas (y, muy probablemente, la mayoría) de las herramientas en Linux que reportan estadísticas de memoria recuperan su información del pseudo sistema de archivos /proc/meminfo . Podemos usar los comandos catlesspara hacer lo mismo.

Escribimos lo siguiente:

menos / proc / meminfo

El comando "less / proc / meminfo" en una ventana de terminal.

Es posible que vea diferentes campos según el kernel que se esté ejecutando y la arquitectura de la CPU. Obtuvimos los siguientes resultados en nuestra máquina virtual:

MemTotal: 2035260 kB
MemFree: 919064 kB
MemDisponible: 1300932 kB
Búferes: 33528 kB
En caché: 457604 kB
SwapCached: 29732 kB
Activo: 313360 kB
Inactivo: 603276 kB
Activo (anon): 74648 kB
Inactivo (anon): 355004 kB
Activo (archivo): 238712 kB
Inactivo (archivo): 248272 kB
Imposible de vencer: 16 kB
Bloqueado: 16 kB
SwapTotal: 1557568 kB
SwapFree: 873024 kB
Sucio: 80 kB
Reescritura: 0 kB
Páginas anón: 414100 kB
Asignado: 97436 kB
Shmem: 4148 kB
KRecuperable: 52932 kB
Losa: 94216 kB
Recuperable: 52932 kB
SUnreclaim: 41284 kB
KernelStack: 9280 kB
Tablas de páginas: 45264 kB
NFS_Instable: 0 kB
Rebote: 0 kB
WritebackTmp: 0 kB
Límite de compromiso: 2575196 kB
Comprometido_AS: 5072192 kB
VmallocTotal: 34359738367 kB
Vmalloc Usado: 35712 kB
VmallocChunk: 0 kB
Percpu: 720 kB
Hardware dañado: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Tamaño de página enorme: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 180160 kB
DirectMap2M: 1916928 kB

Todos los tamaños están en kibibytes a  menos que se indique lo contrario. Esto es lo que significan todos, junto con algunos otros que puede ver según la configuración y el hardware de su computadora:

  • MemTotal: RAM total utilizable (aparte de algunos bits reservados y el código binario del kernel).
  • MemFree: La suma de LowFreeHighFreeLa cantidad de RAM disponible actualmente.
  • MemAvailable: Memoria disponible estimada para iniciar nuevas aplicaciones, sin intercambiar.
  • Búferes: almacenamiento temporal para bloques de disco sin formato. Esto reduce la entrada y salida del disco duro. También acelera el acceso a solicitudes posteriores de los mismos datos porque ya están en la memoria.
  • En caché: las páginas en caché se leen de archivos en el disco duro (sin incluir  SwapCached).
  • SwapCached: memoria que se intercambió hacia afuera y hacia adentro, y una copia permanece en el espacio de intercambio.
  • Activo: memoria utilizada recientemente. No se recupera a menos que sea absolutamente necesario.
  • Inactivo: memoria que se ha utilizado, pero no la utilizada más recientemente. Es un candidato probable para la recuperación.
  • Activo (anon): memoria asignada a los archivos creados en un tmpfs pseudo sistema de archivos. Los archivos anónimos no residen en el disco duro.
  • Inactivo (anon):  cantidad de memoria anónima, tmpfsshmemque es candidata a desalojo (recuperación de memoria).
  • Activo (archivo):  Cantidad de memoria caché de archivos en uso, o que se ha usado desde el ciclo de recuperación de memoria anterior.
  • Inactivo (archivo):  cantidad de memoria caché de archivos leída de un disco duro que es candidato para ser recuperado.
  • Unevictable: cantidad de memoria que debería ser desalojada, pero no lo es porque esté bloqueada en la memoria por procesos de espacio de usuario.
  • Mlocked: cantidad total de memoria que no se puede desalojar porque está bloqueada por procesos de espacio de usuario.
  • HighTotal: Cantidad total de HighMem, que utilizan los programas de espacio de usuario y la caché de página. El kernel puede acceder a esta zona de memoria, pero es más lento que LowMem.
  • HighFree:  Cantidad de HighMem.
  • LowTotal:  Cantidad de LowMem, que está disponible para los mismos usos que HighMem, pero también para que el kernel lo utilice para sus propios fines.
  • LowFree: Cantidad de LowMem.
  • MmapCopy:  cantidad de memoria que se ha asignado a los datos del archivo.
  • SwapTotal: Cantidad total de espacio de intercambio disponible.
  • SwapFree:  cantidad de espacio de intercambio que no se utiliza actualmente.
  • Sucio:  cantidad de memoria a la espera de volver a escribirse en el disco.
  • Reescritura: memoria que se está escribiendo activamente en el disco.
  • AnonPages: páginas sin respaldo de archivos asignadas a tablas de páginas de espacio de usuario.
  • Asignado: archivos (como bibliotecas) que se asignan a la memoria.
  • Shmem:  cantidad de memoria consumida en tmpfspseudo-sistemas de archivos.
  • KReclaimable: asignaciones de memoria del kernel que el kernel intentará recuperar si la demanda de memoria es lo suficientemente grave.
  • Slab: caché de estructuras de datos en el kernel.
  • SReclaimable:  cantidad de Slabmemoria que se puede recuperar, como cachés.
  • SUnreclaim:  cantidad de Slabmemoria que no se puede recuperar.
  • KernelStack:  cantidad de memoria asignada a las pilas del kernel.
  • PageTables:  cantidad de memoria dedicada al nivel más bajo de tablas de página.
  • Listas rápidas: debido a que la asignación y eliminación de tablas de páginas es una operación muy frecuente, es vital que sea lo más rápido posible. Por lo tanto, las páginas utilizadas para las tablas de páginas se almacenan en caché en una serie de listas diferentes llamadas "listas rápidas".
  • NFS_Unstable: páginas del sistema de archivos de red (NFS) que ha recibido el servidor, pero que aún no se han escrito en el almacenamiento no volátil.
  • Rebote: memoria utilizada para búferes de rebote de dispositivos de bloque. Un búfer de rebote se coloca en la memoria lo suficientemente bajo como para que un dispositivo acceda directamente a él. Luego, los datos se copian en la página de usuario deseada en HighMem.
  • WritebackTmp: memoria utilizada por el sistema de archivos en el espacio de usuario (FUSE) para búferes de escritura diferida temporales.
  • CommitLimit: La cantidad total de memoria actualmente disponible para ser asignada en el sistema.
  • Committed_AS: la cantidad de memoria estimada para satisfacer todas las demandas actuales. Si un programa solicita algo de RAM, la solicitud se registra, pero la RAM solo se asigna una vez que el programa comienza a usarla. Además, solo se asigna según sea necesario, hasta la cantidad máxima reservada por el programa. Se puede “asignar” más memoria de la que realmente se puede entregar. Si todos los programas intentan cobrar sus chips de RAM a la vez, el casino de memoria podría quebrar (y tener que ir con el límite en la mano a los financieros del espacio de intercambio).
  • VmallocTotal:  tamaño total del área de memoria de vmalloc.
  • VmallocUsed: Cantidad de área de vmalloc utilizada. Desde Linux 4.4, este campo ya no se calcula, está codificado.
  • VmallocChunk:  bloque contiguo más grande del área libre de vmalloc.
  • Hardware  corrupto : cantidad de memoria etiquetada con problemas de corrupción de memoria física. No se asignará.
  • LazyFree:  cantidad de memoria en MADV_FREEestado. Cuando una aplicación establece la marca MADV_FREEen un rango de páginas, esto indica que ya no las necesita y que ahora son candidatos a reclamar. La recuperación real puede retrasarse hasta que haya suficiente demanda de memoria. Si la aplicación comienza a escribir en las páginas, se puede cancelar la reclamación.
  • AnonHugePages: páginas enormes sin respaldo de archivos asignadas a tablas de páginas de espacio de usuario. Las páginas sin respaldo de archivos no provienen de un archivo del disco duro.
  • ShmemHugePages:  cantidad de memoria utilizada por la memoria compartida ( shmem) y los sistemas de pseudoarchivos ( tmpfs) asignados con páginas enormes.
  • ShmemPmdMapped:  cantidad de memoria compartida asignada al espacio de usuario con páginas enormes.
  • CmaTotal:  Cantidad de páginas CMA (Asignador de memoria contigua). Estos son utilizados por dispositivos que solo pueden comunicarse con regiones contiguas de memoria.
  • CmaFree:  Cantidad de páginas CMA (Contiguous Memory Allocator) gratuitas.
  • HugePages_Total:  Tamaño de grupo de páginas enorme.
  • HugePages_Free:  número de páginas enormes no asignadas en el grupo.
  • HugePages_Rsvd:  Número de páginas enormes reservadas. Se ha hecho el compromiso de asignar, pero aún no se ha realizado la asignación.
  • HugePages_Surp:  número de páginas enormes en el grupo por encima del valor definido del sistema.
  • Hugepagesize:  tamaño de páginas enormes.
  • DirectMap4k: número de bytes de RAM asignados a páginas de 4 kB.
  • DirectMap4M: número de bytes de RAM asignados a páginas de 4 MB.
  • DirectMap2M: número de bytes de RAM asignados a páginas de 2 MB.
  • DirectMap1G: número de bytes de RAM asignados a páginas de 2 GB.

Como es habitual en Linux, hay más de una forma de obtener una descripción general rápida y siempre al menos una forma de profundizar en los detalles.

Probablemente usará freetopy con  vmstate regularidad, y lo mantendrá /proc/meminfoen reserva para cuando necesite profundizar para investigar un problema en particular.