Cómo comprobar el uso de la memoria desde el terminal de Linux
- Dave McKay
@TheGurkha
- El 11 de marzo de 2020, 8:00am EDT
Hay un montón de maneras que usted puede obtener la información sobre el uso de la memoria dentro de su sistema Linux. En este resumen, cubriremos los métodos de línea de comandos más utilizados: free
vmstat
, y top
. También veremos la lectura de /proc/meminfo
directamente.
Cómo usa Linux la RAM
La RAM es un recurso finito del que todos los procesos, como las aplicaciones y los demonios, quieren un trozo. Sólo hay una cantidad de ella disponible. El núcleo arbitra las disputas por la memoria y asigna la memoria racionada a todos los procesos hambrientos. Es como una madre pájaro con más picos abiertos de los que tiene para el grub.
La RAM no utilizada es RAM desperdiciada. Linux utiliza cualquier RAM sobrante para cosas como el espacio de búfer de los archivos, para mantener el equipo funcionando con 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 por una fuga de memoria, pero ese es raramente el caso.
Por lo general es sólo el núcleo haciendo tenazmente su trabajo en el fondo. Si hay otras demandas de la memoria RAM que el núcleo ha robado para sus propios dispositivos, renuncia a la memoria al instante, por lo que no hay daño hecho.
Si el núcleo decide que es más eficiente para empezar a utilizar el espacio de intercambio, que pone en juego, también. Hay mucha confusión sobre el valor de swappiness
en Linux y cuando el kernel empezará a usar la swap. Es falso que el valor swappiness
establezca un umbral de uso de RAM que desencadene la activación de swap.
Pero ahora, veamos las diferentes técnicas que puedes utilizar en la ventana de terminal para ver el uso de RAM en tu ordenador Linux.
El comando free
El comando free te da una tabla de la memoria RAM total, usada, libre, compartida, buffer/cache y disponible en tu ordenador. También te muestra la cantidad total de espacio de intercambio configurado, y cuánto está usado y disponible.
En nuestro ejemplo, usaremos la opción -m
(mebibytes). Sin embargo, también podrías utilizar -b
(bytes), -k
(kibibytes), o -g
(gibibytes).
Escribimos el siguiente comando:
free -m
Esta es la salida que obtenemos:
total used free shared buff/cache available Mem: 1987 901 95 80 990 811 Swap: 1521 651 869
Las columnas de Mem
contienen la siguiente información:
- Total: La cantidad total de RAM física en este equipo.
- Utilizada: La suma de Libre+Buffers+Cache restada de la cantidad total.
- Libre: La cantidad de memoria no utilizada.
- Compartida: Cantidad de memoria utilizada por los sistemas de archivos
tmpfs
. - Buff/cache: Cantidad de memoria utilizada para los buffers y la caché. Esto puede ser liberado rápidamente por el kernel si es necesario.
- Disponible: Esta es una estimación de la memoria que está disponible para atender las solicitudes de memoria de las aplicaciones y de cualquier otro software operativo en el equipo.
- Total: El tamaño de la partición o archivo de intercambio.
- Utilizado: La cantidad de espacio de swap que está en uso.
- Libre: La cantidad de espacio de swap restante (sin usar).
Las columnas Swap
contienen la siguiente información:
También puedes usar el siguiente truco ingenioso que hemos retocado de uno de nuestros lectores para ver el porcentaje de espacio de swap que se usa:
free -m | grep Swap | awk '{print ($3/$2)*100}'
Relacionado: Cómo usar el comando free en Linux
El comando vmstat
Es imposible tener una buena comprensión de la forma en que se utiliza 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 trabajan estrechamente juntos.
Puede utilizar el comando vmstat
para profundizar en cómo se utiliza su espacio de intercambio (o memoria virtual). Le da un informe sobre una variedad de estadísticas relacionadas con el swap basado en los valores promedio desde el último reinicio.
Escriba lo siguiente:
vmstat
Esta es la salida sin la envoltura:
Hay muchos puntos de datos en ese informe, así que los desglosaremos:
- Proc:
- r: El número de procesos «ejecutables». Se están ejecutando o están esperando su próxima ráfaga de ciclos de CPU por tiempo.
- b: El número de procesos en suspensión ininterrumpida. Estos no están durmiendo, sino realizando una llamada al sistema de bloqueo. No pueden ser interrumpidos hasta que completen su acción actual. Típicamente, este proceso es un controlador de dispositivo esperando que algún recurso se libere. 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.
- Libre: La cantidad de memoria ociosa (no utilizada).
- buff: La cantidad de memoria utilizada como búferes.
- Caché: La cantidad de memoria utilizada como caché.
- Swap:
- si: La cantidad de memoria virtual intercambiada desde el espacio de intercambio.
- So: La cantidad de memoria virtual intercambiada hacia el espacio de intercambio.
- IO:
- bi: Bloques en. El número de bloques de datos utilizados para intercambiar la memoria virtual de vuelta a la RAM.
- bo: Bloques de salida. El número de bloques de datos utilizados para intercambiar la memoria virtual fuera de la RAM y en el espacio de intercambio.
- Sistema:
- in: El número de interrupciones por segundo, incluyendo el reloj.
- Cs: El número de cambios de contexto por segundo. Un cambio de contexto es cuando el kernel pasa de procesar en modo sistema a modo usuario.
- CPU: Estos valores son todos porcentajes del tiempo total de la CPU:
- us: Tiempo dedicado a la ejecución de código de usuario (no kernel).
- Sy: Tiempo de ejecución de código del núcleo.
- id: Tiempo de inactividad.
- wa: Tiempo de espera de entrada o salida.
- st: El tiempo que una máquina virtual tiene que esperar a que el hipervisor termine de atender a otras máquinas virtuales antes de poder volver a atender a esta máquina virtual.
Relacionado: Cómo usar el comando vmstat en Linux
El comando top
El comando
top
muestra una pantalla repleta de información. Los valores se actualizan cada pocos segundos.Para utilizarlo, escribimos lo siguiente:
top
Se pulsó la tecla «e». Esto cambió la visualización a megabytes, que son más fáciles de analizar visualmente que las largas cadenas 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í tienes la información que encontrarás en cada línea:
- Línea uno: La hora, cuánto tiempo lleva funcionando el equipo, cuántas personas están conectadas y cuál ha sido la media de carga en los últimos uno, cinco y 15 minutos.
- Línea dos: El número de tareas y sus estados: en ejecución, detenidas, en reposo o zombis.
- Línea tres: Información de la CPU (ver el desglose de los campos más abajo).
- Línea cuatro: La cantidad total de memoria física, y cuánta está libre, usada, en búfer o en caché.
- Línea cinco: La cantidad total de memoria de intercambio, y cuánta está libre, usada y disponible (teniendo en cuenta la memoria que se espera que sea recuperable de las cachés).
- us: Tiempo que la CPU pasa ejecutando procesos para usuarios en el espacio de usuario.
- Sy: Tiempo que la CPU pasa ejecutando procesos del sistema «espacio del kernel».
- ni: Tiempo que la CPU pasó ejecutando procesos con un valor agradable establecido manualmente.
- id: Tiempo de inactividad de la CPU.
- Wa: Tiempo que la CPU pasa esperando a que se complete la E/S.
- hi: Tiempo que la CPU pasó atendiendo interrupciones de hardware.
- si: Tiempo que la CPU pasó atendiendo interrupciones de software.
- st (tiempo de robo): Tiempo que la CPU perdió debido a la ejecución de máquinas virtuales.
- PID: ID del proceso.
- USUARIO: Nombre del propietario del proceso.
- PR: Prioridad del proceso.
- NI: El valor agradable 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. (Vea la lista de valores que puede tomar este campo más abajo).
- %CPU: La cuota de tiempo de CPU utilizada por el proceso desde la última actualización.
- %MEM: La cuota de memoria física utilizada.
- TIEMPO+: El 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.)
- D: Reposo ininterrumpido.
- R: En ejecución.
- S: En reposo.
- T: Rastreado (detenido).
- Z: Zombie.
Los campos de la CPU en la línea tres son los siguientes:
Es posible que tenga que pulsar las teclas de flecha izquierda o derecha para ver todas las columnas. Los valores de cada columna se describen a continuación:
PublicidadEl estado mostrado en la columna
S
puede ser uno de los siguientes:- ulse Q para salir de
top
.Lectura de /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 utilizar los comandoscat
oless
para hacer lo mismo.Escribimos lo siguiente:
less /proc/meminfo
Es posible que veas diferentes campos dependiendo del kernel que se esté ejecutando, y de la arquitectura de la CPU. Obtuvimos los siguientes resultados en nuestra máquina virtual:
MemTotal: 2035260 kB MemFree: 919064 kB MemAvailable: 1300932 kB Buffers: 33528 kB Cached: 457604 kB SwapCached: 29732 kB Active: 313360 kB Inactive: 603276 kB Active(anon): 74648 kB Inactive(anon): 355004 kB Active(file): 238712 kB Inactive(file): 248272 kB Unevictable: 16 kB Mlocked: 16 kB SwapTotal: 1557568 kB SwapFree: 873024 kB Dirty: 80 kB Writeback: 0 kB AnonPages: 414100 kB Mapped: 97436 kB Shmem: 4148 kB KReclaimable: 52932 kB Slab: 94216 kB SReclaimable: 52932 kB SUnreclaim: 41284 kB KernelStack: 9280 kB PageTables: 45264 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 2575196 kB Committed_AS: 5072192 kB VmallocTotal: 34359738367 kB VmallocUsed: 35712 kB VmallocChunk: 0 kB Percpu: 720 kB HardwareCorrupted: 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 Hugepagesize: 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 ellos, junto con algunos otros que podrías ver dependiendo de la configuración y el hardware de tu ordenador:
- MemTotal: Total de RAM utilizable (aparte de unos pocos bits reservados y el código binario del kernel).
- MemFree: La suma de
LowFree
HighFree
. La cantidad de RAM disponible actualmente. - MemAvailable: Memoria estimada disponible para iniciar nuevas aplicaciones, sin swapping.
- Bufferes: Almacenamiento temporal para bloques de disco en bruto. Esto reduce la entrada y salida del disco duro. También acelera el acceso a posteriores peticiones de los mismos datos porque ya están en la memoria.
- Caché: Páginas en caché leídas desde archivos del disco duro (sin incluir
SwapCached
). - SwapCached: Memoria que se ha intercambiado y vuelto a intercambiar, y queda una copia en el espacio de intercambio.
- Activa: Memoria utilizada recientemente. No se recupera a menos que sea absolutamente necesario.
- Inactiva: Memoria que ha sido utilizada, pero no la más reciente. Es una candidata probable a ser reclamada.
- Activa(anon): Memoria asignada a archivos creados en un
tmpfs
sistema de pseudoarchivos. Los archivos anónimos no residen en el disco duro. - Inactivo(anon): Cantidad de memoria anónima,
tmpfs
, yshmem
candidata a ser desalojada (recuperación de memoria). - Activo(archivo): Cantidad de memoria caché de archivo en uso, o que ha sido utilizada desde el anterior ciclo de reclamación de memoria.
- Inactivo(archivo): Cantidad de memoria caché de archivo leída desde un disco duro que es candidata a ser reclamada.
- Inevitable: Cantidad de memoria que debería ser desalojable, pero que no lo es porque está bloqueada en la memoria por procesos del espacio de usuario.
- Mlocked: Cantidad total de memoria no desalojable porque está bloqueada por procesos del espacio de usuario.
- HighTotal: Cantidad total de HighMem, que es utilizada por los programas del espacio de usuario y la caché de páginas. El núcleo puede acceder a esta zona de memoria, pero le resulta más lento que la LowMem.
- HighFree: Cantidad de HighMem libre.
- LowTotal: Cantidad de LowMem, que está disponible para todos los mismos usos que la HighMem, pero también para que el núcleo la utilice para sus propios fines.
- LowFree: Cantidad de LowMem libre.
- MapCopy: Cantidad de memoria que ha sido asignada a datos de archivo.
- SwapTotal: Cantidad total de espacio de intercambio disponible.
- SwapFree: Cantidad de espacio de intercambio que no se utiliza actualmente.
- Dirty: Cantidad de memoria que espera ser escrita de nuevo en el disco.
- Writeback: Memoria que se está escribiendo activamente en el disco.
- AnonPages: Páginas no respaldadas por archivos mapeadas en tablas de páginas del espacio de usuario.
- Mapped: Archivos (como bibliotecas) que se mapean en la memoria.
- Shmem: Cantidad de memoria consumida en
tmpfs
sistemas de pseudoarchivos. - KReclaimable: Asignaciones de memoria del kernel que el kernel intentará reclamar si la demanda de memoria es lo suficientemente severa.
- Slab: Caché de estructuras de datos en el núcleo.
- SReclaimable: Cantidad de
Slab
memoria que podría ser reclamada, como las cachés. - SUnreclaim: Cantidad de
Slab
memoria que no puede ser reclamada. - KernelStack: Cantidad de memoria asignada a las pilas del núcleo.
- PageTables: Cantidad de memoria dedicada al nivel más bajo de las tablas de páginas.
- Quicklists: Dado que la asignación y eliminación de las tablas de páginas es una operación muy frecuente, es vital que sea lo más rápida posible. Por ello, las páginas utilizadas para las tablas de páginas se almacenan en caché en una serie de listas diferentes denominadas «quicklists».
- NFS_Unstable: Páginas del sistema de archivos de red (NFS) que el servidor ha recibido, pero que aún no se han escrito en el almacenamiento no volátil.
- Bounce: Memoria utilizada para los búferes de rebote de los dispositivos de bloque. Un búfer de rebote se coloca en la memoria lo suficientemente bajo como para que un dispositivo pueda acceder directamente a él. Los datos se copian entonces en la página de usuario deseada en HighMem.
- WritebackTmp: Memoria utilizada por Filesystem in Userspace (FUSE) para las memorias intermedias de escritura-retorno.
- 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 sólo se asigna una vez que el programa comienza a utilizarla. También se asigna sólo cuando se necesita, hasta la cantidad máxima que el programa reservó. Se puede «asignar» más memoria de la que realmente se puede entregar. Si todos los programas intentan cobrar sus fichas de RAM a la vez, el casino de la memoria podría quebrar (y tener que acudir con la gorra a los financieros del espacio de intercambio).
- VmallocTotal: Tamaño total del área de memoria vmalloc.
- VmallocUsed: Cantidad de área vmalloc utilizada. Desde Linux 4.4, este campo ya no se calcula, está codificado de forma rígida.
- VmallocChunk: Mayor bloque contiguo de área vmalloc libre.
- HardwareCorrupted: Cantidad de memoria etiquetada como con problemas de corrupción de memoria física. No se asignará.
- LazyFree: Cantidad de memoria en estado
MADV_FREE
. Cuando una aplicación establece la banderaMADV_FREE
en un rango de páginas, esto indica que ya no las necesita, y que ahora son candidatas a ser reclamadas. La reclamación real puede retrasarse hasta que haya suficiente demanda de memoria. Si la aplicación comienza a escribir en las páginas, la reclamación puede cancelarse. - AnonHugePages: Páginas enormes no respaldadas por archivos mapeadas en tablas de páginas del espacio de usuario. Las páginas no respaldadas por archivos no proceden 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 (Contiguous Memory Allocator). Estas son utilizadas por los dispositivos que sólo pueden comunicarse a regiones contiguas de memoria.
- CmaFree: Cantidad de páginas CMA (Contiguous Memory Allocator) libres.
- HugePages_Total: Tamaño del pool de páginas enormes.
- HugePages_Free: Número de páginas enormes no asignadas en el pool.
- HugePages_Rsvd: Número de páginas enormes reservadas. El compromiso de asignar se ha realizado, pero la asignación aún no se ha producido.
- HugePages_Surp: Número de páginas enormes en el pool por encima del valor definido por el sistema.
- Hugepagesize: Tamaño de las 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 visión general rápida, y siempre al menos una forma de profundizar en los detalles.
PublicidadProbablemente usarás
free
top
, yvmstate
regularmente, y mantén/proc/meminfo
en reserva para cuando necesites hacer una inmersión profunda para investigar un tema concreto.Dave McKay
Dave McKay utilizó por primera vez los ordenadores cuando la cinta de papel perforada estaba de moda, y ha estado programando desde entonces. Tras más de 30 años en el sector de la informática, ahora es un periodista tecnológico a tiempo completo. A lo largo de su carrera, ha trabajado como programador independiente, director de un equipo internacional de desarrollo de software, gestor de proyectos de servicios informáticos y, más recientemente, como responsable de protección de datos. Dave es un evangelista de Linux y defensor del código abierto.Leer Biografía Completa «