The Information Systems and Computer Applications examination covers material that is usually taught in an introductory college-level business information systems course.

Consumo extraño de CPU

En los servidores de bases de datos de aplicaciones web, 
típicamente, el consumo de CPU sigue el mismo patrón de serpiente
que el tráfico:

Gráfico semanal de las conexiones a NGINX según stub_status

Por lo tanto encontrar un perfil de CPU como el siguiente resulta muy extraño:

Consumo extraño de CPUConsumo extraño de CPU 

Parece que existen picos de consumo de CPU, pero por lo general dicho servidor parece no tener apenas carga:

Cpu(s): 0.7%us, 0.1%sy, 0.0%ni, 98.4%id, 0.7%wa, 0.0%hi, 0.0%si, 0.0%st

Dicho gráfico se obtiene mediante un script en bash que obtiene los valores mediante el top:

CPUIDLE=$(/usr/bin/top n 2 d 2 b -p 1 | grep “^Cpu(s)” | awk ‘{print $5}’ | tail -n1 | sed ‘s/\%.*$//ig’)

Se usa el valor 100-idle (quinto valor), por lo que aparentemente el script es vàlido. Dejé dicho valor en un bucle para ver los resultados:

while true;
do
/usr/bin/top n 2 d 2 b -p 1 | grep "^Cpu(s)" | awk '{print $5}' | 
tail -n1 | sed 's/\%.*$//ig' >> /tmp/valores;
done

Y me encontré que no siempre es valida la cadena:

Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  
0.0%si,  0.0%st
Cpu(s):  0.7%us,  0.1%sy,  0.0%ni, 98.4%id,  0.7%wa,  0.0%hi,  
0.0%si,  0.0%st

En el caso que la CPU se encuentre al 100% idle desaparece el espacio, por lo que se coge el valor siguiente (0.0% wait) dando erróneamente 100% de uso de CPU. Añadiendo un simple sed para substituir las comas por espacios podemos solucionar el problema:

/usr/bin/top n 2 d 2 b -p 1 | grep "^Cpu(s)" | sed 's/,/ /'g | awk 
'{print $5}' | tail -n1 | sed 's/\%.*$//ig'

O bien cambiando el awk por cut:

/usr/bin/top n 2 d 2 b -p 1 | grep "^Cpu(s)" | cut -d, -f4 | tail 
-n1 | sed 's/\%.*$//ig'

Por lo tanto, siempre de se debe ver cómo se cogen los valores ya que por un error tan simple como este podemos malinterpretar el estado del servidor. En este caso pasamos de interpretar un consumo elevado en momentos puntuales a un uso casi marginal.

Comments are closed.