Introducción
NMon (por Nigel’s MONitor) es un sistema de monitoreo para Linux y AIX. Nos permite ver en pantalla los diferentes indicadores de nuestro sistema, o hacerlo de forma no interactiva guardando todos los datos a un CVS para luego procesar y graficar los datos recabados.
No lo probé en AIX, pero en Linux corre sobre SLES9, SLES10, RHEL, Knoppix, Debian, Fedora, Ubuntu y hasta Gentoo con la versión anterior a la actual. Tiene soporte para las distribuciones x86, y para algunas distribuciones x86_64 y POWER.
Es gratis, muy simple de instalar (hay ejecutables para las diferentes distribuciones) y si bien no tiene soporte oficial por parte de IBM, está disponible para bajar desde la wiki de AIX de IBM.
Entre otros, tiene soporte para monitorear los siguientes datos de un sistema:
- Uso de CPU
- Uso de memoria
- Estadísticas del kernel y de la cola de ejecución de procesos
- I/O, transferencias, y tasas de lectura/escritura de los discos
- Espacio libre en file systems
- I/O, transferencias, y tasas de lectura/escritura de las interfaces de red
- Paginado de memoria
- Network File System (NFS)
Instalación
No tiene mayores dificultades, debemos bajar un archivo comprimido de aquí, dependiendo de nuestro hardware y versión del sistema operativo. Descomprimimos el archivo, damos permisos de ejecución (chmod +x) al ejecutable que concuerde con nuestra distribución de Linux/AIX y listo.
Uso interactivo
Si usamos NMon de forma interactiva, al ejecutarlo en una terminal veremos una pantalla similar a la siguiente:
+nmon-12a---------------------Hostname=server-vm----Refresh= 2secs ---09:45.39-+
¦ ¦
¦ ---------------------
--------- For help type H or ... ¦
¦ # # # # #### # # nmon -? - hint ¦
¦ ## # ## ## # # ## # nmon -h - full ¦
¦ # # # # ## # # # # # # ¦
¦ # # # # # # # # # # To start the same way every time ¦
¦ # ## # # # # # ## set the NMON ksh variable ¦
¦ # # # # #### # # ¦
¦ ------------------------------ ¦
¦ ¦
¦ Use these keys to toggle statistics on/off: ¦
¦ c = CPU l = CPU Long-term - = Faster screen updates ¦
¦ m = Memory j = Filesystems + = Slower screen updates ¦
¦ d = Disks n = Network V = Virtual Memory
¦
¦ r = Resource N = NFS v = Verbose hints ¦
¦ k = kernel t = Top-processes . = only busy disks/procs ¦
¦ h = more options q = Quit ¦
¦------------------------------------------------------------------------------¦
En la misma nos muestra las teclas de uso más comunes (con h nos muestra la lista completa):
¦ HELP ------------------------------------------------------------------------¦
¦ key --- statistics which toggle on/off --- ¦
¦ h = This help information ¦
¦ r = RS6000/pSeries CPU/cache/OS/kernel/hostname details + LPAR ¦
¦ t = Top Process Stats 1=basic 3=CPU ¦
¦ u = shows command arguments (hit twice to refresh) ¦
¦ c = CPU by processor
l = longer term CPU averages ¦
¦ m = Memory and Swap stats j = JFS Usage Stats ¦
¦ n = Network stats N = NFS ¦
¦ d = Disk I/O Graphs D=Stats o = Disks %Busy Map ¦
¦ k = Kernel stats & loadavg V = Virtual Memory ¦
¦ g = User Defined Disk Groups [start nmon with -g <filename>] ¦
¦ v = Verbose Simple Checks - OK/Warnings/Danger ¦
¦ b = black & white mode ¦
¦ --- controls --- ¦
¦ + and - = double or half the screen refresh time ¦
¦ q = quit space = refresh screen now ¦
¦ . = Minimum Mode =display only busy disks and processes ¦
¦ 0 = reset peak counts to zero (peak = ">")
¦
¦ Developer Nigel Griffiths ¦
¦------------------------------------------------------------------------------¦
A continuación veremos la salida de las opciones que a mi entender resultan más útiles:
Estadísticas del kernel (tecla k)
¦ Kernel Stats ----------------------------------------------------------------¦ ¦ RunQueue -1 Load Average CPU use since boot time ¦ ¦ ContextSwitch 0.0 1 mins 0.71 Uptime Days= 0 Hours= 6 Mins=57 ¦ ¦ Forks 0.0 5 mins 0.34 Idle Days= 0 Hours= 6 Mins=45 ¦ ¦ Interrupts 713.0 15 mins 0.16 Average CPU use= 2.83% ¦ ¦------------------------------------------------------------------------------¦
Uso de CPU (tecla c)
En esta gráfica con forma de barras horizontales, las U representan el tiempo de usuario, las s el tiempo de sistema y
las w el wait time. Los > registran los picos de CPU.
¦ CPU Utilisation -------------------------------------------------------------¦ ¦ +-------------------------------------------------+¦ ¦CPU User% Sys% Wait% Idle|0 |25 |50 |75 100|¦ ¦ 1 53.6 31.4 0.0 14.9|UUUUUUUUUUUUUUUUUUUUUUUUUUsssssssssssssss > |¦ ¦ 2 54.0 19.5 0.0 26.5|UUUUUUUUUUUUUUUUUUUUUUUUUUUsssssssss > |¦ ¦ +-------------------------------------------------+¦ ¦Avg 53.8 25.3 0.0 21.0|UUUUUUUUUUUUUUUUUUUUUUUUUUssssssssssss > |¦ ¦ +-------------------------------------------------+¦ ¦------------------------------------------------------------------------------¦
Uso de memoria (tecla m)
¦ Memory Stats ----------------------------------------------------------------¦ ¦ RAM High Low Swap ¦ ¦ Total MB 3012.8 -0.0 -0.0 2055.1 ¦ ¦ Free MB 19.1 -0.0 -0.0 2055.1 ¦ ¦ Free Percent 0.6% 100.0% 100.0% 100.0% ¦ ¦ MB MB MB ¦ ¦ Cached= 2301.9 Active= 1717.3 ¦ ¦ Buffers= 141.9 Swapcached= 0.0 Inactive = 962.1 ¦ ¦ Dirty = 3.6 Writeback = 0.0 Mapped = 1346.4 ¦ ¦ Slab = 89.7 Commit_AS = 906.5 PageTables= 19.2 ¦ ¦------------------------------------------------------------------------------¦
Estadísticas de red (tecla n)
¦ Network I/O -----------------------------------------------------------------¦ ¦I/F Name Recv=KB/s Trans=KB/s packin packout insize outsize Peak-> Recv Trans ¦ ¦ lo 8.6 8.6 37.0 37.0 238.6 238.6 1234.6 1234.6 ¦ ¦ eth0 44.3 1420.2 613.9 1140.8 73.8 1274.8 44.3 1420.2 ¦ ¦vmnet1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ¦ ¦vmnet8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ¦ ¦------------------------------------------------------------------------------¦
Estadísticas de disco (teclas D y d)
Con la tecla d nos presenta la información de forma tabular:
¦ Disk I/O -----(/proc/diskstats)--------all data is Kbytes per second---------¦ ¦DiskName Busy Read Write Xfers Size Peak% Peak-RW InFlight ¦ ¦sda 0% 0.0 48.0KB/s 6.5 7.0KB 13% 1883.9KB/s 0 |¦ ¦sda1 0% 0.0 48.0KB/s 6.5 7.0KB 12% 1883.9KB/s 0 |¦ ¦sdb 39% 14864.6 24.0KB/s 115.9 128.0KB 100% 126938.8KB/s 1 |¦ ¦sdb1 0% 0.0 0.0KB/s 0.0 0.0KB 0% 0.0KB/s 0 |¦ ¦sdb2 33% 14652.7 24.0KB/s 101.4 144.0KB 100% 124939.1KB/s 1 |¦ ¦sdb3 6% 211.9 0.0KB/s 14.5 14.0KB 13% 1999.6KB/s 0 |¦ ¦fd0 0% 0.0 0.0KB/s 0.0 0.0KB 0% 0.0KB/s 0 |¦ ¦------------------------------------------------------------------------------¦
Con la tecla D nos presenta la información en forma de gráfica de barras horizontal. De forma similar a la gráfica de uso de CPU, las W representan escrituras en disco, las R lecturas en disco y los > registran los picos de transferencia:
¦ Disk I/O -----(/proc/diskstats)--------all data is Kbytes per second---------¦ ¦DiskName Busy Read WriteKB|0 |25 |50 |75 100|¦ ¦sda 0% 0.0 4.0| > |¦ ¦sda1 0% 0.0 4.0| > |¦ ¦sdb 43% 1916.5 393.7|WWWWRRRRRRRRRRRRRRRRRRR |¦ ¦sdb1 0% 0.0 0.0|> |¦ ¦sdb2 30% 1688.7 393.7|WWWRRRRRRRRRRRRR |¦ ¦sdb3 13% 227.8 0.0|RRRRRR> |¦ ¦fd0 0% 0.0 0.0|> |¦ ¦------------------------------------------------------------------------------¦
Verbose Simple Checks (tecla d)
+nmon-12a---------------------Hostname=server-vm----Refresh= 2secs ---23:46.50-+ ¦ Verbose Mode ----------------------------------------------------------------¦ ¦ Code Resource Stats Now Warn Danger ¦ ¦ OK -> CPU %busy 5.2% >80% >90% ¦ ¦ OK -> Top Disk %busy 0.0% >40% >60% ¦ ¦------------ ------------------------------------------------------------------¦
Capturar datos para análisis posterior
Si queremos capturar datos para posterior análisis, utilizamos la opción -f. La opción -s configura el período de muestreo, y la opción -c la cantidad de muestreos.
Por ejemplo, para obtener muestras cada 30 segundos durante una hora (120 muestras), ejecutamos:
nmon -f -s 30 -c 120
Esto genera un archivo con nombre hostname_date_time.nmon con formato CSV, que luego puede ser interpretado por el NMon analyser. Por más info, ver la wiki de NMon analyser y la ayuda de NMon.
Referencias
Wiki de NMon
Wiki de NMon analyser
nmon performance: A free tool to analyze AIX and Linux performance
NMon en Wikipedia