===== Smem: La mejor aplicación para visualizar la memoria RAM en sistemas UNIX =====
smem es la mejor a día de hoy para visualizar el estado de la memoria ram en sistemas GNU/Linux permitiendo numerosos informes sobre el uso de la misma. A diferencia de las herramientas existentes, smem puede reportar tamaño del conjunto proporcional (PSS), que es una representación más realista de la cantidad de memoria utilizada por las bibliotecas, aplicaciones y usuarios en un sistema de memoria virtual. Antes de empezar a utilizar la herramienta se recomienda la lectura de "[[http://www.busindre.com/nociones_basicas_sobre_la_memoria|Tipos de memoria RAM]]"
**Conceptos básicos para usar smem**
* **USS** (//Unique Set Size//): Memoria no compartida.
* **PSS** (//Proporcional Set Size//): USS + memoria compartida proporcional de un proceso.
* **RSS** (//Resident Set Size//): Memoria física asignada al espacio de direcciones de un proceso, pero de forma no proporcional, es decir, incluyendo también la memoria ocupada por bibliotecas compartidas utilizadas por el proceso.
NOTA: USS y PSS incluyen únicamente el uso de memoria física. No incluyen la memoria que se ha intercambiado a disco.
**Características de smem**
* Visión general del sistema.
* Reporte por proceso , mapeo y usuario.
* Listado y filtrado por proceso , la cartografía , o de usuario.
* Columnas configurables de múltiples fuentes de datos.
* Unidades de salida configurables y posibilidad de porcentajes.
* Cabeceras configurables y totales.
* Leer datos en tiempo real (/proc).
* Lectura de instantáneas mediante repositorios o archivos tar comprimidos.
* Herramienta de captura para sistema embebidos.
* Visualizar gráficas si se tiene instalado [[http://matplotlib.org/|Matplot]], se pueden exportar como EPS , PNG, SVG, JPG, etc..
**Enlaces**
* Página web: [[http://www.selenic.com/smem]]
* Repositorio de código fuente: [[http://selenic.com/repo/smem]]
* Lista de correo: [[http://selenic.com/mailman/listinfo/smem]]
===== Uso de smem =====
Indicando el origen de los datos, herramientas como smemcap permiten hacer copias del estado de la memoria ram en un determinado momento en el tiempo. Las instantáneas de la ram pueden ser con smem abiertas y mostrar la información deseada. Para ello tenemos estas opciones.
**-K KERNEL**, **--kernel=KERNEL**
Ruta a la imagen del núcleo descomprimida (vmlinux), al usarse con la opción "-w" permite obtener información de la ram en relación al kernel y sus datos.
**-R REALMEM**, **--realmem=REALMEM**
Capacidad de la memoria RAM física (--realmem=2048M), al usarse con la opción "-W" se obtiene el uso de memoria utilizado por el firmware/hardware. Si se usa junto la opción de porcentajes usará el valor como base para realizar los cálculos.
**-S SOURCE**, **--source=SOURCE**
Para que smem pueda hacer sus cálculos necesita acceder al directorio /proc, la opción --source permite indicarle un directorio previamente guardado con herramientas del tipo android-smemcap si se trata de dispositivos móviles.
NOTA: El comando "free", top y la inmensa mayoría de comandos o ficheros que permiten visualizar información de la memoria RAM no incluye la memoria asignada por los dispositivos de hardware (la tarjeta de vídeo a menudo se asigna una buena parte de sus buffers de pantalla) ni la memoria utilizada por el propio núcleo.
smem -R 8388608K -K /boot/vmlinuz-linux -w
Area Used Cache Noncache
firmware/hardware 521072 0 521072
kernel image 3812 0 3812
kernel dynamic memory 4424052 4282724 141328
userspace memory 827704 150976 676728
free memory 2611968 2611968 0
**Tipos de reporte**
* **-m** Reporta el uso de memoria mediante mapeo (Map,PIDs,AVGPSS,PSS ).
* **-u** Reporta el uso de memoria mediante usuarios.
* **-w** Reporta el uso de memoria mediante los grupos de sistema (Mirar -R y -K).
**Filtros en los reportes**
Nota: Si está ejecutando como un usuario sin privilegios sin especificar "//--source//" sólo se visualizarán los datos de procesos cuyo ///proc/// pueda ser accedido.
* **-M MAPFILTER, --mapfilter=MAPFILTER** Filtra la salida del mapeo.
* **-P PROCESSFILTER, --processfilter=PROCESSFILTER** Filtra la salida de procesos.
* **-U USERFILTER, --userfilter=USERFILTER** Filtra la salida de usuario.
smem -M "/usr/share/icons/hicolor/icon-theme.cach" -U busi -P LXDE
PID User Command Swap USS PSS RSS
383 busi pcmanfm --desktop --profile 0 0 1 8
382 busi lxpanel --profile LXDE 0 4 25 52
**Formatos de salida**
* **-c COLUMNS, --columns=COLUMNS** Especificar las columnas a visualizar.
* **-H, --no-header** No muestra la cabecera de cada unidad (//PID,User,Command,Swap,USS,PSS y RSS//).
* **-k, --abbreviate** Muestra la unidades (//Mb, Kb, etc//).
* **-n, --numeric** Muestra IDs en vez de los nombres de usuario.
* **-p, --percent** Muestra porcentajes.
* **-r, --reverse** Muestra la información empezando por el proceso que más consume (Por defecto lo contrario).
* **-t, --totals** Muestra los totales.
* **-s SORT, --sort=SORT** Ordena la salida mediante los parámetros siguientes.
**Parámetros para utilizar con la opción "-s", --bar y --pie .**
* **maps** total number of mappings.
* **name** name of process.
* **pid** process ID.
* **pss** proportional set size (including sharing).
* **rss** resident set size (ignoring sharing).
* **swap** amount of swap space consumed (ignoring sharing).
* **user** owner of process.
* **uss** unique set size.
* **vss** virtual set size (total virtual memory mapped).
**Gráficas con smem**
* **--bar=XX** Gráfica de barras (Ver los parámetros en el apartado anterior).
* **--pie=XX** Gráfica circular (Ver los parámetros en el apartado anterior).
smem --bar=pid -c "uss, user"
===== Realizar instantáneas del estado de la memoria RAM (Smemcap) =====
La aplicación smemcap genera un archivo tar en la salida estándar con información obtenido de los siguientes ficheros / directorios.
- /proc/$pid/cmdline
- /proc/$pid/smaps
- /proc/$pid/stat
- /proc/meminfo
- /proc/version
smemcap | gzip> smemcap.tar.gz
smem -S smemcap.tar
===== Formas de obtener el tamaño de la memoria RAM desde consola en GNU/linux ====
Total de memoria RAM física real instalada en el equipo.
dmidecode -t 17 | grep Size | awk '{s+=$2} END {print s}'
8192
**Memoria física disponible**.
dmesg | grep Memory
[ 0.000000] Memory: 7856952K/8067116K available (5229K kernel code, 857K rwdata, 1632K rodata, 1120K init, 1288K bss, 210164K reserved)
awk '/MemTotal/ { print $2 }' /proc/meminfo
7863724
free
total used free shared buffers cached
Mem: 7863724 5390780 2472944 93536 113584 4339812
-/+ buffers/cache: 937384 6926340
Swap: 2367484 0 2367484