Introducción
El comando lsmem forma parte del paquete util-linux y se encarga de mostrar información detallada sobre la memoria física del sistema, incluyendo los rangos de direcciones, el tamaño de cada bloque y su estado (online/offline). A diferencia de herramientas como free o top, lsmem se centra en la visión de bajo nivel que el kernel expone a través de sysfs, lo que permite al administrador identificar fragmentos de memoria que pueden estar deshabilitados por hardware o por configuraciones de arranque. Este nivel de detalle resulta especialmente útil en servidores de alta disponibilidad, en sistemas con memoria hot‑pluggable y en entornos de virtualización donde es necesario validar la asignación de recursos. En el siguiente artículo exploraremos su funcionamiento, sintaxis y los casos de uso más comunes.
Qué es lsmem
lsmem lee la información presente en el directorio /sys/devices/system/memory/, donde cada bloque de memoria se representa como un subdirectorio llamado memoryXXX. Cada uno de estos directorios contiene archivos como state, removable y size que indican si el bloque está activo, si puede ser retirado en caliente y cuántos kilobytes ocupa. Al ejecutar lsmem sin argumentos, la herramienta agrega estos datos y los presenta en una tabla legible que muestra el inicio y el fin de cada segmento, su tamaño y su estado actual. Esta salida permite detectar rápidamente huecos de memoria no utilizados o bloques marcados como offline que podrían volver a ponerse en línea mediante operaciones de hot‑add.
Sintaxis básica
La sintaxis básica de lsmem es muy sencilla: lsmem [opciones]. Si no se especifican opciones, el comando asume el comportamiento predeterminado de listar todos los rangos de memoria disponibles. Algunas de las opciones más usadas incluyen -a o –all para mostrar también los bloques que están marcados como removibles, -b o –bytes para expresar los tamaños en bytes en lugar de la unidad predeterminada (kilobytes), y -J o –json para generar una salida en formato JSON que facilita su procesamiento por scripts. Otras opciones como -h o –help y -V o –version son estándar para obtener ayuda y la versión del programa.
Opciones más útiles
Entre las opciones más útiles destacan -p o –human, que adapta la presentación a unidades legibles (KB, MB, GB) según el tamaño de cada bloque, y -S o –summarize, que resume la cantidad total de memoria online y offline en lugar de listar cada segmento individualmente. También existe la opción -o o –output que permite seleccionar columnas específicas como start, end, size, state y removable, lo que resulta muy práctico cuando se necesita alimentar a otros programas con datos precisos. Combinar varias opciones, por ejemplo lsmem -b -o start,size,state, brinda una visión cruda y detallada ideal para auditorías de hardware.
Ejemplos prácticos
Ejemplo 1: Ver la memoria en bytes y con columnas personalizadas. Ejecutando lsmem -b -o start,size,state se obtiene una lista donde cada línea muestra la dirección de inicio, el tamaño exacto en bytes y si el bloque está online o offline. Esto es útil para scripts que deben validar que todos los rangos de memoria estén activos después de un arranque. Ejemplo 2: Resumir la memoria total online y offline. Con lsmem -S se imprimirá algo como: total online memory: 32GB, total offline memory: 0GB, lo que permite una verificación rápida de la capacidad disponible sin necesidad de sumar valores manualmente. Otro caso de uso es combinar lsmem con grep para filtrar bloques removibles: lsmem -a | grep removable:1 ayuda a identificar qué secciones de memoria pueden ser retiradas en caliente, información crítica en plataformas que soportan hot‑plug de RAM.
Interpretación de la salida
La salida de lsmem está organizada en columnas que, por defecto, incluyen el rango de direcciones de inicio (Start), el rango de fin (End), el tamaño (Size) y el estado (State). El campo State puede mostrar online, indicando que el bloque está disponible para el kernel, o offline, señalando que está desactivado, ya sea por falta de hardware, por configuración de BIOS o por una acción previa de hot‑remove. Cuando se usa la opción -a, aparece además la columna Removable, con valores 1 o 0, que indica si el bloque puede ser añadido o eliminado mientras el sistema está en marcha. Interpretar correctamente estos datos ayuda a planificar actualizaciones de memoria, a diagnosticar fallos de detección de RAM y a validar la funcionalidad de mecanismos de memoria dinámica en entornos de nube y contenedores.
Limitaciones y alternativas
Aunque lsmem brinda una vista precisa de la memoria física, tiene ciertas limitaciones: no muestra información sobre el uso de la memoria por procesos, ni sobre caches, buffers o swap; para esos aspectos se deben emplear herramientas como free, vmstat o /proc/meminfo. Además, en sistemas donde el kernel no expone los bloques de memoria a través de sysfs (por ejemplo, algunas arquitecturas embebidas muy antiguas), lsmem puede devolver una salida vacía o un error. En esos casos, alternativas como dmidecode -t memory o lshw -class memory pueden ofrecer datos sobre los módulos de RAM instalados, aunque a un nivel menos granular que el proporcionado por lsmem. Por último, en contenedores, la visión de lsmem está limitada al espacio de memoria asignado al contenedor, por lo que se recomienda complementarla con métricas de cgroups para obtener el uso real.
Conclusión
En resumen, lsmem es una herramienta esencial para cualquier administrador de sistemas que necesite conocer a fondo la disposición y el estado de la memoria física en un servidor Linux. Su capacidad para mostrar bloques individuales, su estado online/offline y su removibilidad lo convierte en un aliado poderoso para tareas de capacidad planning, diagnóstico de hardware y validación de características de hot‑plug. Aunque no sustituye a los comandos tradicionales de monitoreo de uso de memoria, su información de bajo nivel completa el cuadro y permite tomar decisiones más informadas sobre la infraestructura. Se recomienda incluir lsmem en el conjunto de herramientas de administración rutinaria y familiarizarse con sus opciones para aprovechar al máximo el potencial de la memoria del sistema.