Comprenda fácilmente su uso de RAM de Linux con Smem

Publicado: 2022-01-29
Pantalla de computadora portátil que muestra el logotipo de Bash shell sobre un fondo rojo
fatmawati achmad zaenuri/Shutterstock

El uso de la memoria de Linux puede ser difícil de interpretar y comprender. Con smem es fácil averiguar qué memoria está usando un proceso y qué procesos están usando más.

Uso de memoria

Linux le brinda muchas formas de verificar qué sucede con la memoria RAM de su computadora. El problema es que la administración de la memoria es un desafío complicado para su sistema operativo. Tiene que hacer malabares con la RAM física, la RAM virtual en forma de espacio de intercambio y las demandas de los diferentes tipos de procesos que se ejecutan en un momento dado.

¿Cuánta RAM necesita tu computadora para juegos de PC?
RELACIONADO ¿Cuánta RAM necesita su computadora para juegos de PC?

Los procesos consumen RAM a medida que se cargan en la memoria. Luego solicitan más RAM para tener espacio para realizar las tareas para las que están diseñados. Algunos procesos apenas afectan la RAM, otros consumen mucha memoria.

El núcleo y el resto del sistema operativo, su entorno de escritorio y cada aplicación o sesión de línea de comandos que ejecuta están clamando por una porción de la cantidad finita de RAM instalada en su computadora. Algunos procesos generan otros procesos. Algunos procesos comparten RAM con otros procesos.

Cómo verificar el uso de memoria desde la terminal de Linux
RELACIONADO Cómo verificar el uso de memoria desde la terminal de Linux

Tratando de descifrar todo esto y encontrar una respuesta simple a la pregunta "¿Cuánta RAM está usando este programa o proceso?" puede ser un desafío sorprendente. La granularidad es excelente y tiene su lugar pero, igualmente, el exceso de información puede ser un impedimento.

Anuncio publicitario

Por ejemplo, usar cat para echar un vistazo al pseudo sistema de archivos /proc/meminfo devolvió 50 líneas de salida en la máquina utilizada para investigar este artículo. ¿Por dónde empiezas?

 gato /proc/meminfo

Y algunas utilidades de Linux dan respuestas diferentes. En nuestra máquina de prueba, teníamos una instancia de ejecución less , que tenía un ID de proceso de 2183.

Podemos usar la utilidad pmap con la opción -x (extendida) para obtener una imagen completa del uso de memoria de un proceso. Lo usaremos con el ID de proceso de nuestra instancia de less :

 pmap -x 2183 

Consultando el mapa de memoria de un solo proceso

En la parte inferior de la salida, obtenemos un total para el tamaño del conjunto residente, que es la cantidad de RAM principal que se utiliza.

La salida de pmap para una sola instancia de less

Luego usamos la utilidad ps con la opción -o (salida), seleccionamos la columna RSS y le pasamos el ID de proceso de la misma instancia de less :

 ps-o rss 2183 

Usando ps para ver el RSS de la misma instancia de menos

Obtenemos un resultado diferente. Esta es una decisión de diseño por parte de los autores de ps . Esto es de la página de man de ps :

Los campos SIZE y RSS no cuentan algunas partes de un proceso, incluidas las tablas de páginas, la pila del núcleo, la estructura thread_info y la estructura task_struct. Suele ser al menos 20 KiB de memoria que siempre es residente. TAMAÑO es el tamaño virtual del proceso (código+datos+pila).
Anuncio publicitario

Los autores de otras utilidades tienen sus propios puntos de vista sobre cómo medir el uso de RAM.

El RSS, el USS y el PSS

El tamaño del conjunto residente (RSS) es la cantidad de RAM asignada a un proceso, excluyendo el espacio de intercambio, pero incluyendo cualquier RAM requerida por las bibliotecas compartidas que utiliza el proceso.

Por qué es bueno que la RAM de tu computadora esté llena
RELACIONADO Por qué es bueno que la RAM de tu computadora esté llena

RSS casi siempre informa sobre el uso de RAM. Si dos o más procesos usan una o más bibliotecas compartidas, RSS simplemente agregará el uso de RAM de cada biblioteca a su cuenta de uso de RAM para cada uno de esos procesos. Además de la inexactitud, hay cierta ironía en esto. Las bibliotecas compartidas significan que cada proceso no necesita cargar su propia instancia privada de una biblioteca. Si la biblioteca ya está en la memoria, la compartirá y reducirá la sobrecarga de RAM.

El tamaño del conjunto proporcional intenta abordar esto dividiendo la cantidad de memoria compartida entre los procesos que la comparten. Si hay cuatro procesos que comparten algo de memoria, PSS informa que cada uno de esos procesos utiliza el 25 % de la RAM compartida. Esta es una aproximación, pero se parece más a lo que está pasando que a la imagen que pinta RSS.

El tamaño de conjunto único es la cantidad de RAM que utiliza exclusivamente un proceso, ya sea que el proceso la consuma directamente o que las bibliotecas las utilice únicamente el proceso. Nuevamente, ignora el espacio de intercambio. Solo le interesa la RAM física genuina.

USS y PSS son términos y conceptos propuestos por Matt Mackall, el autor de smem .

La utilidad smem

La utilidad smem informa sobre la memoria utilizada por procesos, usuarios, mapeo o en todo el sistema. En todas las distribuciones que probamos, requirió instalación. Para instalarlo en Ubuntu, use este comando:

 sudo apt instalar smem 

Instalando smem en Ubuntu

Para instalar smem en Fedora necesitas escribir:

 sudo dnf instalar smem 

Instalando smem en Fedora

Para instalar smem en Manjaro use:

 sudo pacman-sy smem 

Instalando smem en Manjaro

Anuncio publicitario

El uso de smem sin opciones le brinda una lista de los procesos que usan RAM.

 chistoso 

Invocar smem sin opciones de línea de comando

Se muestra una tabla de información en la ventana del terminal.

La salida predeterminada de smem

Las columnas son:

  • PID : el ID de proceso del proceso que está usando la memoria.
  • Usuario : El nombre de usuario del usuario propietario del proceso.
  • Comando : La línea de comando que inició el proceso.
  • Intercambio : cuánto espacio de intercambio está utilizando el proceso.
  • USS : El tamaño único del conjunto.
  • PSS : El tamaño del conjunto proporcional.
  • RSS : El tamaño del conjunto residente.

Para ver los tamaños expresados ​​como porcentajes, use la opción -p (porcentaje).

 smem-p 

Usando la opción smem -p para solicitar porcentajes

Los tamaños en bytes han sido reemplazados por porcentajes.

salida de smem que muestra porcentajes

Para ver las figuras representadas en una forma más humana, use la opción -k (abreviar). Esto reduce las cifras y agrega indicadores de unidad.

 smem-k 

Uso de la opción smem -k para mostrar tamaños con indicadores de unidad

En lugar de bytes sin procesar, los tamaños se muestran en megabytes, gigabytes, etc.

salida smem usando indicadores de unidad como K, M y G

Anuncio publicitario

Para agregar una línea de totales, use la opción -t (totales).

 smem-k-t 

Usando la opción smem -t para agregar una línea de totales a la salida

La última línea de la salida muestra los totales de cada columna.

La línea de totales en la parte inferior de la salida de smem

Refinar el informe

Puede pedirle a smem que informe sobre el uso de la memoria por parte de los usuarios, el mapeo (bibliotecas) o todo el sistema. Para filtrar la salida por usuario, use la opción -u (usuario). Tenga en cuenta que si desea ver algo más que su propio uso, deberá ejecutar smem con sudo .

 smem -u
 sudo smem-u 

Usando la opción smem -u con y sin sudo

Como puede ver, la salida se deforma para los nombres de usuario de más de ocho caracteres.

Para ver el uso asignado a las bibliotecas que están en uso, independientemente de qué procesos están usando las bibliotecas, ni qué usuarios poseen esos procesos, use la opción -m (asignación).

 smem-m-k-t 

Uso de la opción smem -m para obtener un informe del mapeador

También pedimos valores legibles por humanos y un total.

El informe mapeado de smem que muestra el uso de memoria por parte de las bibliotecas

Para ver el uso de memoria en todo el sistema, use la opción -w (en todo el sistema).

 smem-w-k-t 

El informe de todo el sistema smem

Informes sobre un solo programa

Con un poco de magia de línea de comandos, podemos informar sobre un solo programa y todos sus subprocesos. Conectaremos la salida de smem a tail y le pediremos a tail que solo muestre la última línea. Le diremos a smem que use valores legibles por humanos y proporcione un total. El total será la última línea, y esa es la tail de línea que se mostrará para nosotros.

Anuncio publicitario

Usaremos la opción -c (columnas) con smem y le indicaremos qué columnas queremos incluir en nuestra salida. Restringiremos esto a la columna Tamaño de conjunto proporcional. La opción -P (filtro de proceso) nos permite dar una cadena de búsqueda a smem . Solo se incluirán las líneas de salida coincidentes.

 smem -c pss -P firefox -k -t | cola -n 1 

Usando smem para mostrar el uso de la memoria por parte de un proceso y sus hijos

Esa es una forma rápida y ordenada de averiguar el consumo de RAM de un programa y sus procesos secundarios.

Generación de gráficos

Puede pasar las opciones --pie o --bar para que smem genere gráficos. Hay que decir que con demasiadas categorías, los gráficos se vuelven rápidamente ininteligibles, pero pueden ser útiles para una visión general rápida.

El formato del comando es:

 smem --nombre del pastel -s uss 

Pidiéndole a smem que produzca un gráfico circular

El gráfico circular aparece en su propia ventana de visualización.

Un gráfico circular smem en su propia ventana de visualización

Para ver otras parcelas, use pss o rss en lugar de uss . Para ver un gráfico de barras, use --bar en lugar de --pie .

Anuncio publicitario

Para que esto funcione, deberá tener Python instalado, junto con la biblioteca matplotlib . Estos ya estaban instalados en las distribuciones de Ubuntu, Fedora y Manjaro que probamos.

Las cosas buenas vienen en paquetes pequeños

La utilidad smem tiene algunos trucos más bajo la manga, y le recomendamos que consulte su página de man . Su repertorio principal es lo que hemos descrito aquí, y es una pequeña herramienta excelente para tener en su caja de herramientas CLI.

RELACIONADO: 37 comandos importantes de Linux que debe conocer