- 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.
Column | Description |
kthr | Kernel thread state changes per second over the sampling interval. |
r | Number of kernel threads placed in run queue. |
b | Number of kernel threads placed in the Virtual Memory Manager (VMM) wait queue (awaiting resource, awaiting input/output). |
p | The 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/fo | Number of file pages paged in/out per second. Note: This column is available only on AIX 5 and later systems. |
cpu | Breakdown 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. |
us | Average percentage of CPU time executing in the user mode. |
sy | Average percentage of CPU time executing in the system mode. |
id | Average percentage of time that CPUs were idle and the system did not have an outstanding disk I/O request. |
wa | CPU 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. |
pc | Number of physical processors consumed. Displayed only if the partition is running with shared processor. |
ec | The 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).
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