Estadísticas de memoria virtual (Virtual memory stats)
Primero debo aclarar algunos puntos sobre el
análisis de performance o de las herramientas para evaluar el
rendimiento de un equipo, en este caso Linux (espero hacerlo lo
propio para Unix, por lo menos Oracle Solaris, OpenSolaris, OpenIndiana, que
los conozco muy bien):
1.- Hoy en día primero tienes un histórico del comportamiento de un equipo con herramientas como: Nagios y Cacti (esto provee la radiografiá general de la
maquina en gráficos bonitos, algo asi como cuando vas a un medico y
este te dice, estas sufriendo de x cosa, ahora debes ir a un
especialista).
2.- Una herramienta como
vmstat no se lee columna por columna, recorrí rápidamente en
google colocando vmstat linux (sobre la busqueda) y la mayoría traduce lo que tiene el
manual, eso es importante pero es como cuando tomas una pieza de arte (una pintura) y miras la parte central y dices: "que feo este dibujo", cuando lo que debes
mirar es lo que trata de comunicar el artista.
3.- Una herramienta como
el vmstat no se debe usar sola, existen otras como mpstat, sar,
iostat, top, que según sea el caso nos van a permitir ir dilucidando
que pasa en distintos niveles con la aplicación que molesta.
4.- Si usted no sabe que
es un proceso bloqueado, que es un proceso en espera, que es un
context switch (cambio de contexto), memoria swap, se le va a hacer
casi imposible leer la obra de arte delante de sus ojos, yo les dejo
unas de esas definiciones aquí:
Proceso Bloqueado
(blocked): Por otras aplicaciones.
cs=Context switch= Cambio
de contexto, cuando el proceso A debe dejar el procesador por que le
toca al proceso B, se debe guardar el estado de ese proceso hasta que
le toca A, ese guardado es en memoria.
5.- Usted siente que por
mas que lo mira y lo vuelve a mirar le falta algo, llame a un experto, ellos lo van a asesorar por que viven mirando esos cuadros y
les es muy fácil empezar a identificar que pasa, pero por favor no
crea que el trabajo es fácil y que eso lo hace cualquiera que tenga
un curso de Performance.
Ahora la tipica salida del
vmstat y primero que significa cada línea, por aquí les dejo el man en ingles, la explicación la adapto un poco para no expertos:
vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id
wa
0 0 214148 82348 41932 299140 1 2 13 25 121 29 25 4 70 1
0 1 212148 82932 41932 301536 670 0 670 0 968 1168 38 4 53 6
2 0 209640 78440 41940 301324 782 0 782 80 1070 1215 34 4 56 5
0 0 209596 74692 42136 301680 64 0 220 16 1015 1721 29 5 59 7
1 0 209580 68004 42136 301940 0 0 12 0 1015 1154 30 3 66 1
^C
Primero,que nada el número
que acompaña el vmstat es el número de segundos en el que tendras
la recolección, segundo, la primera fila no se debe tomar en cuenta
para un análisis, esta generalmente es un acumulado desde que se encendió la maquina.
Procs:
r (run queue): Número de procesos
esperando por procesador
b (blocked): Procesos que estan
bloqueados, osea que dieron paso a otros procesos para que se
continue su ejecucion.
Memory:
swapped: Cantidad de procesos completos pasados (swapped) a disco.
free: Cantidad de memoria física desocupada
(no usada), libre para ser usada.
Swap:
si (swapping in): Cantidad de memoria
pasada desde disco a memoria (el proceso se llama swapping).
so (swapping out): Cantidad de memoria
pasada a disco desde memoria (el proceso se llama swapping).
IO (In/Out):
bi (block in): Bloques recibidos desde
un dispostivo de bloque (recordemos que la estructura del disco
trabaja en bloques de 8192b, 512b o como lo hayamos definido).
bo (block out): Bloques recibidos hacia
un dispostivo de bloque.
System:
in (interruptions): Interrupciones por
segundo, incluido los ticks del reloj del procesador (para que puedas
ver como se manejan las interrupciones, ejecuta el vmstat y mueve
rapidamente el mouse, ahora mira la columna, el sistema operativo
cuenta cada movimiento tuyo del mouse, asi como el pulsar teclas,
etc).
cs (context switch): Número de cambios de contexto (context switch) por segundo (un proceso debe dejar el procesador para darle
paso a otro proceso, por gasto de su quantum por ejemplo, aqui lo ves
reflejado).
CPU:
us (user): Gasto de procesos en espacio
usuario (todos los procesos de aplicaciones de usuarios, desde una
base de datos, hasta un navegador).
sy (system): Gasto de porcesos en
espacio kernel (todo con lo que forma el sistema operativo base).
Id (idle): Tiempo en que el procesador
esta sin ser usado (100% significa que el procesador no tiene carga,
20%, hay un 80% de procesos que lo estan ocupando).
wa: Tiempo de espera para
I/O (ejemplo porcesos esperando para ser copiados en disco duro,
pasados a memoria, etc).
Ahora un ejemplo de como
analizar el big picture y no solo las columnas.
De la imagen anterior podemos decir que esta maquina tiene poca cantidad de ram libre (columna free en memory), podemos decir que no hay muchos procesos que estén corriendo (us, sy), que el procesador posee el 100% de su capacidad sin uso actualmente.
Esta gráfica tiene muchos procesos que están siendo ejecutados en espacio usuario, el procesador esta a su máxima capacidad (idle 0%), hay una gran cantidad de procesos que están en cola, esperando por el procesador (run queue 31) la memoria no presenta mayor estrés (192MB de RAM libres antes, ahora 185MB), no son procesos por lo que se ve que ocupen el manejo en disco (bi, bo serenos).
Todos los procesos pasan a ser atendidos, bajando rápidamente la cantidad de cambios de contexto (podemos decir que eran procesos sin mayor cantidad de información que requirieran un uso muy fuerte de la memoria y que el procesador pudo atenderlos velozmente), al poco tiempo vemos que todo regresa a la normalidad, si por el contrario el valor fuera constante (los procesos que se estaban corriendo, no muy estresantes) habría que observar al procesador con otras herramientas (mpstat es una opción), ya que este no estaría funcionando de forma adecuada entonces.
Ahora un caso de estrés de la memoria en el equipo:
Acá podemos observar como hay procesos que están siendo ejecutados en espacio kernel (columna sy), se ven procesos que si consumen algo de memoria y que esperan ser atendidos por el procesador (run queue), con un continuo alto valor en cambios de contextos y el procesador esta siendo usado a su maxima expresión (idle 0%), si en este equipo no se estan ejecutando scripts para estresarlo (este caso la salida fue provocada), sino por el contrario se están usando procesos en los que no generan un mayor estrés en la maquina, si toca que hagamos un estudio mas profundo de que esta pasando y seguramente descubriríamos que este procesador no es suficiente para la carga de trabajo que se le esta exigiendo.
Espero estos análisis les ayuden a ir creando los suyos.
Como siempre a la orden.
Enjoy.




No hay comentarios:
Publicar un comentario