20 de noviembre de 2008

Comandos para monitorear el desempeño en Solaris

1. sar (System Activity Reporter)

sar
-d => display activity for all block device
-g/p => paging activities
-m => message & semaphore activities
-u => CPU utilization
-v => Reports status of process, i-node, file tables


2. iostat (Input/Output Statistics) en Solaris

Esta herramienta reporta de manera iterativa la actividad de E/S de terminales, discos y cintas, así como el uso del CPU.

La sintáxis típica del comando es algo como lo siguiente:

> iostat 1 5

Esto significa que cada intervalo de 1 segundo y por 5 veces, el comando nos mostrará


tty sd21 sd23 sd24 sd25 cpu
tin tout kps tps serv kps tps serv kps tps serv kps tps serv us sy wt id
0 76 0 0 0 3 0 17 192 3 75 17 3 7 3 3 22 72
0 693 0 0 0 0 0 0 0 0 0 17 4 6 0 3 48 48
0 670 0 0 0 0 0 0 8 2 5 17 4 8 1 4 24 70
0 670 0 0 0 0 0 0 9 2 12 17 4 11 2 5 24 68
0 670 0 0 0 0 0 0 384 3 7 8 2 9 8 8 40 44

Esto es, se nos muestra infomación dividida por 6 bloques de columnas, el primer bloque (tty), concentra dos datos tin y tout, aquí lo que se muestra son los caracteres de entrada y de salida.
Las siguientes cuatro columnas (sd21 a sd25), se refieren a estadísticas de 5 discos duros.
Cada uno de estos discos tiene tres columnas que significan:
  • kps: Bloques por segundo.
  • tps: Transacciones por segundo.
  • serv: Tiempo de servicio promedio, en mlisegundos.
Finalmente, viene una columna especial para el cpu:
  • us: En modo usuario.
  • sy: En modo de sustema.
  • wt: En espera de E/S.
  • id: En modo idle.
Antes de seguir adelante debo mencionarles que la primera línea corresponde a los valores acumulados desde el inicio del servidor hasta el momento de la siguiente iteración.
Las líneas siguientes se refieren a los datos obtenidos desde el momento de la última iteración hasta un segundo después (para efectos del ejemplo, aunque puede elejirse cualquier otro valor).

Sobre este comando, exíste una variante en la cual podemos ver estadísticas extendidas

> iostat -xtc

Una salida típica de este comando sería:

extended device statistics tty cpu
device r/s w/s kr/s kw/s wait actv svc_t %w %b tin tout us sy wt id
sd21 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0 0 0 0 100
sd22 0.0 0.0 0.4 0.4 0.0 0.0 49.5 0 0
sd23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
En donde cada columna significa:
  • r/s: Lecturas por segundo.
  • w/s: Escrituas por segundo.
  • Kr/s: Kb leídos por segundo.
  • Kw/s: Kb escritos por segundo.
  • wait: Número promedio de transacciones en espera de servicios (Longitud de la cola)
  • actv: Número promedio de transacciones activamente servidas.
  • svc_t: Tiempo promedio de servicio.
  • %w: Porcentaje de tiempo en que la cola no está vacía.
  • %b: Porcentaje de tiempo en que el procesador está ocupado.
En general este comando nos da información bastante útil respecto al uso que están teniendo los discos del sistema. Ahora, que lo que estaría más interesante sería saber qué procesos están haciendo uso de ellos. De alguna forma también nos puede auxiliar el comando ps, ya que entre sus variadas opciones nos puede mostrar datos sobre el uso de la memoria swap. Aunque esto es sólamente una parte muy pequeña del uso sobre el discu duro pues aún nos faltaría averiguar qué archivos tiene abiertos, en dónde está escribiendo o leyendo, etc.

3. lsof (LiSt of Opened Files)

Para tener una idea de qué procesos tienen abiertos archivos reulares, directorios, sockets (Unix e Internet), archivos especiales de bloques, etc; podemos servirnos del comando lsof, que aunque no es nativo de SunOS, se puede incorporar bajando el paquete de http://www.sunfreeware.com/ En donde se encuentra disponible para solaris 6, 8, 9 y 10.

La sintáxis típica es

> lsof


4. vmstat (Virtual Memory Statistics)

Reporta estadísticas del uso de la memoria virtual sobre los hilos del kernel, discos, memoria virtual, traps y actividad del CPU.

La sintáxis simple es:

> vmstat

Y su salida es:
 kthr      memory            page            disk          faults      cpu
r b w swap free re mf pi po fr de sr s3 -- -- -- in sy cs us sy id
0 0 0 3557544 166696 553 1866 6 3 3 0 0 8 0 0 0 397 10621 2212 9 12 78
En este caso

  • kthr: Reporta el número de hilos del kernel en cualquiera de los siguientes estados:
  1. r: El número de hilos en la cola de ejecución
  2. b: El número de hilos bloqueados, en espera de recursos de E/S.
  3. w: El número de procesos ligeros (LWPs) en swap, esperando por ecursos para finalizar.
  • Report the number of kernel threads in each

memory Report on usage of virtual and real memory.

swap available swap space (Kbytes)

free size of the free list (Kbytes)

page Report information about page faults and
paging activity. The information on each of
the following activities is given in units
per second.

re page reclaims - but see the -S
option for how this field is modi-
fied.
mf minor faults - but see the -S
option for how this field is modi-
fied.
pi kilobytes paged in

po kilobytes paged out

fr kilobytes freed

de anticipated short-term memory
shortfall (Kbytes)

sr pages scanned by clock algorithm

When executed in a zone and if the pools
facility is active, all of the above (except
for "de") only report activity on the pro-
cessors in the processor set of the zone's
pool.

disk Report the number of disk operations per
second. There are slots for up to four
disks, labeled with a single letter and
number. The letter indicates the type of
disk (s = SCSI, i = IPI, and so forth); the
number is the logical unit number.

faults Report the trap/interrupt rates (per
second).

in interrupts
sy system calls

cs CPU context switches

When executed in a zone and if the pools
facility is active, all of the above only
report actitivity on the processors in the
processor set of the zone's pool.

cpu Give a breakdown of percentage usage of CPU
time. On MP systems, this is an average
across all processors.

us user time

sy system time

id idle time


> vmstat 2 5
 kthr      memory            page            disk          faults      cpu
r b w swap free re mf pi po fr de sr s3 -- -- -- in sy cs us sy id
0 0 0 3557544 166696 553 1866 6 3 3 0 0 8 0 0 0 397 10621 2212 9 12 78
2 0 0 3437616 159800 2128 5211 0 0 0 0 0 0 0 0 0 438 13856 2318 35 19 46
5 0 0 3437616 159792 2324 5604 0 0 0 0 0 1 0 0 0 425 14711 2391 39 20 41
0 0 0 3439064 161616 200 552 0 4 4 0 0 2 0 0 0 362 7254 2126 9 6 86
0 0 0 3439064 161616 7 80 0 0 0 0 0 0 0 0 0 352 6649 2099 6 4 90
Aún con lo que hemos visto hay otra opción interesante para este comando que es el switch -p

> vmstat -p 2 3

Cuya salida sería como esta:

memory page executable anonymous filesystem
swap free re mf fr de sr epi epo epf api apo apf fpi fpo fpf
3555664 166616 553 1867 3 0 0 3 0 0 0 0 0 3 3 3
3439168 157080 7 93 0 0 0 0 0 0 0 0 0 0 0 0
3439160 157072 7 80 0 0 0 0 0 0 0 0 0 0 0 0

Como se observa, se agregan nuevas columnas, esto debido a que el modificador -p hace que vmstat reporte también la actividad de la paginación. Las columnas nuevas significan:

epi Executable page-ins.

epo Executable page-outs.

epf Executable page-frees.

api Anonymous page-ins.

apo Anonymous page-outs.

apf Anonymous page-frees.
fpi File system page-ins.

fpo File system page-outs.

fpf File system page-frees.


Debe decirse que en equipos multiprocesadores, vmstat presenta estadísticas promedio de los procesadores. A fin de tener los datos específicos de cada uno de ellos es necesario usar mpstat, herramienta que se describe a continuación.

5. mpstat (Multi Processor Statistics)

Este comando devuelve reportes estadísticos de cada uno de los procesadores o bien, por grupo de procesadores.

La sintáxis común es:

> mpstat

Y su salida es:

CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 1028 0 177 353 243 1083 30 366 62 0 5631 10 13 0 77
1 839 0 205 44 14 1129 29 365 51 0 4990 9 12 0 79
Esto significa básicamente que en el sistema tenemos instalados dos procesadores, y si revisamos las cuatro últimas columnas encontraremos algo interesante, ahí se describe el porcentaje que el procesador ha dedicado a procesos de usuario (usr), procesos de sistema (sys), así como el porcentaje de tiempo que ha pasado esperando por E/S (wt) y finalmente el porcantaje de tiempo que el procesador ha estado inactivo (idl).

El resto de las columnas son:
  • minf: Fallas menores
  • mjf: Fallas mallores
  • xcal: Llamadas cruzadas interprocesadores.
  • intr: Interrupciones.
  • ithr: Interrupciones como hilos.
  • csw: Cambios de contexto
  • icsw: Cambios involuntario de contexto
  • migr: Migración de hilos (a otros procesadores)
  • smtx: Spins en mutexes (bloqueo no adquirido en el primerintento)
  • srw: Spins en bloqueos de lectura/escritura (bloqueo no adquirido en el primerintento)
  • syscl: Llamadas al sistema
  • set: Grupo de procesadores al que se pertenece
  • usr: Porcentaje de tiempo en procesos de usuario.
  • sys: Porcentaje de tiempo en procesos de sistema.
  • wt: El tiempo de espera de E/S no se calcula ya como porcentaje de tiempo de CPU, por lo tanto siempre va a regresar 0 su medición.
  • idl: Porcentaje de tiempo sin utilizar.

6. Comandos proc (Processes Commands)

Este conjunto de comandos toma información sobre
  • pflags:
  • pcred
  • pldd
  • psig
  • pstack
  • pfiles
  • pstop
  • prun
  • pwait
  • ptime


3 comentarios:

Anónimo dijo...

GRACIAS GRACIAS GRACIAS MIL GRACIAS POR ESTE ESTUPENDO BLOCK

Anónimo dijo...

Las explicaciones son muy claras!

Anónimo dijo...

Gracias por compartir...

Salu2