free
, vmstat
, y top
. También veremos la lectura /proc/meminfo
directamente.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 swappiness
valor en Linux y cuándo el kernel comenzará a usar swap. No es cierto que el swappiness
valor 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 -m
opción (mebibytes). Sin embargo, también puede usar -b
(bytes), -k
(kibibytes) o -g
(gibibytes).
Escribimos el siguiente comando:
libre -m
Esta es la salida que obtenemos:
caché / beneficio compartido gratuito total usado disponible Mem: 1987901 95 80990811 Permuta: 1521651869
Las Mem
columnas 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
tmpfs
sistemas 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 Swap
columnas 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 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 vmstat
comando 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
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 top
comando muestra una pantalla repleta de información. Los valores se actualizan cada pocos segundos.
Para usarlo, escribimos lo siguiente:
parte superior
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 S
columna 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 cat
o less
para hacer lo mismo.
Escribimos lo siguiente:
menos / proc / meminfo
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
LowFree
+HighFree
. La 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,
tmpfs
yshmem
que 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
tmpfs
pseudo-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
Slab
memoria que se puede recuperar, como cachés. - SUnreclaim: cantidad de
Slab
memoria 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_FREE
estado. Cuando una aplicación establece la marcaMADV_FREE
en 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á free
, top
y con vmstate
regularidad, y lo mantendrá /proc/meminfo
en reserva para cuando necesite profundizar para investigar un problema en particular.
0 Comentarios