martes, 7 de enero de 2014

LINUX-RHEL-load average

Gracias a mi colega Sebastián que me recomendó el articulo al final de este post, pude entender cómo funciona la carga de CPU que entregan los comandos top y uptime.

Veamos la información que despliegan estos dos comandos:

Comando uptime:
[root@Emesh ~]# uptime
 11:12:06 up  2:08,  7 users,  load average: 4.59, 4.77, 4.06
[root@Emesh ~]# 

Comando TOP:
[root@Emesh ~]# top -b
top - 11:12:50 up  2:09,  7 users,  load average: 4.48, 4.71, 4.07
Tasks: 231 total,   2 running, 229 sleeping,   0 stopped,   0 zombie
libnuma: Warning: /sys not mounted or invalid. Assuming one node: No such file or directory
%Cpu(s): 12.2 us,  3.9 sy,  1.2 ni, 59.4 id, 23.1 wa,  0.0 hi,  0.2 si,  0.0 st
KiB Mem:   4030052 total,  3915044 used,   115008 free,    87508 buffers
KiB Swap:  4095996 total,     5496 used,  4090500 free,  2391568 cached
...
[root@Emesh ~]#



En ambos casos la información "Load average" indica 3 valores, lo que corresponde a la carga de la CPU al minuto, a los 5 minutos y a los 15 minutos.
Sin embargo qué significa realmente "carga de la CPU".
Es aqui donde intentaré replicar la explicación que aparece en el articulo.

Cada Core de un CPU puede entenderse como el carril de una carretera.
Cada proceso de una cola se entiende como un auto que transita por ese carril.
Cada medición se entiende como el contador de autos que transitan por ese carril.

Veamos el caso en que un CPU tiene un core.
La carretera tiene un solo carril.
Los procesos que transitan por el único carril.
"0.0" significa que no hay autos transitando por el carril. 
"entre 0.1 y 1.0" significa que hay autos transitando por el carril pero avanzar a velocidad normal. El carril esta siendo usado en toda su capacidad sin generar congestión. 
"mayor a 1.0" Significa que hay congestión. Es decir, los procesos avanzan lento por el carril.


Básicamente el indicador de carga de la CPU es el contador que se dedica a observar los autos transitando por un determinado bloque de la carretera.

Entonces, qué pasa cuando una carretera tien 2 carriles (CPU con 2 core)
"entre 0.1  y 1.0" significa que ambos carriles se encuentran con muy poco o nada de tráfico.
"entre 1.0 y 2.0" significa que hay autos transitando por ambos carriles pero avanzan a velocidad normal. Los carriles esta siendo usados en toda su capacidad sin generar congestión. 
"mayor a 2.0" Significa que hay congestión. Es decir, los procesos avanzan lento por ambos carriles.

En síntesis, Para establecer un valor crítico de carga de CPU primero hay que averiguar cuántas CPU hay y cuantos core tiene cada uno.

Podemos saber la cantidad de CPU y sus core de la siguiente forma:
[root@Emesh ~]# cat /proc/cpuinfo | grep "processor"
processor : 0
processor : 1
[root@Emesh ~]# cat /proc/cpuinfo | grep "cores"
cpu cores : 2
cpu cores : 2
[root@Emesh ~]# 

De esta forma lo que importa es determinar la cantidad de cores en total.
Es decir, un server con un procesador dual-core es como tener dos procesadores con un core cada uno.
Un server con un procesador quad-core es como tener 4 procesadores con un core cada uno.

Estableciendo un criterio de alarma:
Tomando como base un procesador con un core.

Warning: Carga al 70% (0.7). Existe un aumento preocupante en la carga de la CPU que merece realizar un chequeo de los procesos que están consumiendo más recursos.

Critical: Carga al 100% (1.0) Revisar los procesos y detener el que consume mayor CPU. En este punto el servidor experimenta retardos en el tiempo de respuesta de sus operaciones. Se debe solucionar el problema en el menor tiempo posible.

Fuente:
http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages

No hay comentarios:

Publicar un comentario