Buscador

martes, 18 de enero de 2011

Síntomas y Errores (Vmstat, iostat)

  • Existen una serie de comandos que nos permiten conocer los sintomas de los posibles problemas que presenta nuestra maquina.
  • Vmstat -> Proporciona información acerca de procesos, actividad de la CPU, memoria, paginación, bloques de entrada salida e interrupciones.


ColumnDescription
kthrKernel thread state changes per second over the sampling interval.
rNumber of kernel threads placed in run queue.
bNumber of kernel threads placed in the Virtual Memory Manager (VMM) wait queue (awaiting resource, awaiting input/output).
pThe number of threads waiting on raw I/Os (bypassing journaled file system (JFS)) to complete. This is only available on AIX 5 and later.
fi/foNumber of file pages paged in/out per second. Note: This column is available only on AIX 5 and later systems.
cpuBreakdown of percentage usage of CPU time. For multiprocessor systems, CPU values are global averages among all processors. Also, the I/O wait state is defined system-wide and not per processor.
usAverage percentage of CPU time executing in the user mode.
syAverage percentage of CPU time executing in the system mode.
idAverage percentage of time that CPUs were idle and the system did not have an outstanding disk I/O request.
waCPU idle time during which the system had outstanding disk/NFS I/O request(s). If there is at least one outstanding I/O to a disk when wait is running, the time is classified as waiting for I/O. Unless asynchronous I/O is being used by the process, an I/O request to disk causes the calling process to block (or sleep) until the request has been completed. Once an I/O request for a process completes, it is placed on the run queue. If the I/Os were completing faster, more CPU time could be used.
pcNumber of physical processors consumed. Displayed only if the partition is running with shared processor.
ecThe percentage of entitled capacity consumed. Displayed only if the partition is running with the shared processor.

La salida nos muestra la siguiente información:


  • Procs

r: El número de procesos en la cola de ejecución. Conclusion: Si tenemos que el numero de procesos en run es superior al número de hilos que tiene la maquina (ver /proc/cpuinfo) podremos tener un problema. No es lo habitual.
b: El número de procesos en espera ininterrumpible. Conclusión: Suele estar unido a un fallo de I/O o recursos. Es decir, tenemos problemas en los discos, cabinas, baterias de las mismas, etc...por ello, irá unido al un alto wait I/O.
  • Memory

lab01-suse:~ # vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0    208  10668  97748 363540    0    0     0     6    2    1  0  0 99  0  0
 0  0    208  11732  97748 363540    0    0     0     0  254   44  0  1 99  0  0
 0  0    208  11724  97748 363540    0    0     0     0  241   98  0  0 100  0  0
 0  0    208  11732  97748 363532    0    0     0     0  141   45  0  1 99  0  0
 0  0    208  11732  97748 363532    0    0     0     0  218  101  0  0 100  0  0
 
lab01-suse:~ # free -m
             total       used       free     shared    buffers     cached
Mem:           934        922         11          0         94        354
-/+ buffers/cache:        474        459
Swap:         1019          0       1019
Ahora mismo tenemos 10 Megas libres de memoria, la prueba que hacemos 
consiste en crear un archivo de 50 Megas. 
Para ello, empleamos el comando :  
dd if=/dev/zero of=/tmp/prueba bs=1024K count=50.
 
Vamos a explicar un poco el funcionamiento de la memoria.
Tenemos dos tipos de procesos: 
persistentes (utiles cuando queremos muchas lecturas) 
y de trabajo (cuando tenemos muchas escrituras).
El sistema asume generalmente que tiene tres tipos de memoria:  
  • Swap (para paginación, destinada sólo para segmentos  de trabajo)-> 
    Se pasan segmentos de memoria a swap, estos segmentos nunca serán 
    recuperados a no ser que sean peticionados. 
  • Disco (donde se encuentran los datos, destinada para segmentos persistentes). 
y la memoria RAM (dentro de ella tenemos la shared(es una porción habitualmente destinada parapara procesos comunes, en nuestro caso puede ser el kernel), la buffer y la cache).
 
Por lo tanto, al crear un fichero de 50 Megas, lo que hace es intentar escribirlo en memoria. Al no tener espacio en ella, revisa la TLB para ver que segementos de memoria puede borrar, primero borrara aquellos permanentes que sean diferentes entre memoria RAM y disco, pasandolos a disco.
El acceso a disco es más lento, esto implica una perdida de velocidad a la hora de leer (es por ello, que al editar el fichero creado va mucho más lento, ya que puede que alguna parte del mismo este en disco tb).
Al tener un número tan bajo de memoria, la maquina sufre un estado de estres e intenta liberar espacio a toda costa, por lo tanto, provocará un momento de paginación y así una liberación de memoria.
Es por ello, que tras ver la memoría libre, vemos que ha aumentado a 100 Megas libres. Finalmente, si borramos el fichero, tenemos que libra aprox. 30 Megas más, son los segmentos que habia alojado en memoria RAM.
  
swpd: la cantidad de memoria virtual empleada (kB), es decir, la cantidad de Swap que esta usando. Conclusion: Si tenemos una cantidad alta de uso de Swap, tendriamos que aumentarle la memoria ram al servidor.
free: la cantidad de memoria inactiva (kB). Conclusion: Memoria Ram libre. Tener un numero bajo, significa aumentarla.
buff: la cantidad de memoria empleada como búferes (kB).
cache: la cantidad de memoria que ha sido cacheada (kB). -> El objetivo de la memoria caché es reducir el tiempo de acceso promedio a la memoria, reduciendo el ancho de banda entre memoria principal y procesador. Conclusión: Si tenemos una alto valor de la memoria de caché implica que tendremos una cantidad de datos en memoría por lo tanto el acceso a ellos será mas rápido.
  • Swap

Vamos a provocar que una maquina swape, para ello hacemos: while true; do bash & done

procs -----------memory---------- ---swap-- -----io---- -system-- -----cpu------ 
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st   
0  2    880  14268  31560 275724    0  176     4   244  876  774  9 51  7 33  0
 5  0   1156  21700  25824 259344    0  276    16   328  705  675 12 52  3 34  0
 2  1   1448  34420  17720 214856    0  292     0   364 1510 1626 17 66  7 10  0
 4  1   1536  44644   7796 197788   96   88    96   140 1007  716  9 53  9 29  0
 3  2   3576  59412    384 161116    0 2000    32  2060 1921 1444 12 66  9 12  0
 3  3  10328  69388    388 139984   32 6752    44  6752  940  898 14 65  9 12  0
 3  0  24248  82052    396 107000    0 13776     0 13836 1405 1568 14 54  9 23  0
10  1  34944  85840    320  87640    0 10704    24 10704 1145 1283 15 65 11  8  0
 1  1  50076  89296    324  69400  544 15212  1392 15268 1477 1610 13 59 13 15  0
10  1  65980  93112    316  54924    0 16000    20 16000 1173 1366 14 57 14 14  0
 0  2  89640  94288    308  41736    0 23660    40 23712 1623 1907 12 52 19 16  0
10  4 109748  94880    284  36484  224 20096   372 20096 1259 1305 12 51 19 18  0
 0  3 136288  94992    280  33332    0 26544   124 26596 1247 1310  8 34 22 35  0
 0  3 168436  94268    248  29980   96 32140   108 32140  780  376  2 11 20 68  0
 0  6 206196  93880    252  28580   32 37756    40 37756  498  154  1  8 16 75  0
 
lab01-suse:~ # free -m
                 total       used       free     shared    buffers     cached

Mem:           934        916         17          0          1         37

-/+ buffers/cache:        877         56

Swap:         1019        201        818
 
           Como podemos ver al ejecutar el comando la maquina empieza a paginar, comienza a pasar datos al espacio de paginación, el so, significa marcos de pagina que son pasados a swap.
Podemo tb observar que el espacio de memoria libre permanece constante, o incluso crece, esto es debido a que aun no ha llenado el espacio de swap. En el momento en el que la swap se acabase la maquina pasaría a perder memoría libre y con ello, la maquina empezaría a caerse.
si: Cantidad de memoria traída del espacio de trasiego desde disco (kB/s).
so: Cantidad de memoria trasegada al disco (kB/s). Conclusion: La maquina esta paginando, por lo tanto, tenemos un problema de memoria. Para localizar cual son los procesos que mayor memoria ocupan lo hariamos con el nmon o con el comando:
ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS
  • IO
bi: Bloques enviados a un dispositivo de bloques (bloques/s).-> lecturas a disco
bo: Bloques recibidos desde un dispositivo de bloques (bloques/s). ->escrituras a disco, en el ejemplo anterior, vemos que ocurre, es por ello que aumenta el numero de memoria libre. Conclusion: Un alto numero implica que la maquina esta teniendo un alto numero de escritura, esto puede producir un wait I/O en el sistema. Suele venir unido a un altisimo uso de disco o aun fallo en la tarjeta de fibra o la cabina, por lo tanto, se deberia revisar toda la arquitectura de almacenamiento. Para verificar que discos son los que mayor uso hacemos:
 lab01-suse:~ # iostat -x 1
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util

sda               4.40  8437.11    1.26   30.19    60.38 20880.50   665.92    68.35  407.12  24.00  75.47

sda1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

sda2              0.00  3400.00    0.00    9.43     0.00  4719.50   500.27    33.62  424.80  78.13  73.71

sda3              4.40  5037.11    1.26   20.75    60.38 16161.01   736.91    34.73  399.54  33.94  74.72

sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

sdb1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00



avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           0.00    0.00    7.14   92.86    0.00    0.00

 

En muchas ocasiones, lo que ocurre es que tenemos un alto uso sobre un disco en concreto, ya que es un cuello de botella, es recomendable que las lunes esten en raid 5. La posible solucion en este caso, seria distribuir los datos en varios discos, de modo que la escritura se reparta.
  • System
in: El número de interrupciones por segundo, incluyendo al reloj.
cs: El número de cambios de contexto por segundo.Conclusion: Van unidos muchas veces a un alto uso de cpu de sistema.
  • CPU
Éstos son porcentajes de tiempo total de CPU.
us: tiempo de usuario. El tiempo en % que estuvo el procesador ocupado con tareas del usuario.
sy: tiempo de sistema. El tiempo en % que estuvo el procesador ocupado con tareas del sistema.
id: tiempo de inactividad. Este tiempo indica en % que estuvo el procesador inactivo.
wa: tiempo de espera para los procesos.

No hay comentarios:

Publicar un comentario