top - mpstat

mpstat - top


Existe mucha confusión al interpretar el uso de la CPU mediante el top o mpstat. Una lectura incorrecta puede hacernos pensar que existe un determinado problema cuando en realidad es otro completamente diferente.

 

mpstat

El comando mpstat nos muestra las actividades del o los procesadores (en caso de múltiples núcleos), contanto desde cero 0 para el primer núcleo. También nos proporciona un promedio de las actividades de todos en conjunto. Además este comando puede ser utilizado en sistemas multiprocesadores o SMP. El parámetro interval especifica la cantidad de tiempo en segundos entre cada reporte. Un valor de 0 indica que las estadísticas de los procesadores serán reportadas desde que arrancó el sistema.

 

El parámetro count puede ser especificado en conjunto con interval si éste no es 0. El valor de count determina el número de reportes generados en el intervalo de segundos indicado. Si el parámetro interval se especifica sin count, el comando generará reportes continuamente hasta que lo paremos (Ctrl+C).


Algunos ejemplos

Ver 5 reportes del primer núcleo a intervalos de 2 segundos
fraterneo@rainbow:~$ mpstat -P 0 2 5
Ver 3 reportes de todos los núcleos a intervalos de 3 segundos
fraterneo@rainbow:~$ mpstat -P ALL 3 3

 top

Éste comando muestra el listado de procesos del sistema en tiempo real pero, con sus diferentes opciones, puede resultar más versátil y adaptable a los gustos del usuario. A continuación, comentamos algunas.

La orden básica muestra, como decíamos, la relación de procesos del sistema, ordenados por consumo de recursos.


Para finalizar con la muestra de top y seguir trabajando con la terminal, presionamos la letra “Q”.
¿Problemas para ver bien el listado? Presiona la letra “Z” para cambiar el color del listado.
¿Quieres actualizar el listado más rápidamente? Pulsa la tecla “D” y cambia los segundos de refresco por un número menor.
¿Tenéis un equipo con varios procesadores? Pulsad la tecla “1″ para ver el consumo desglosado por cpus.
¿Quieres reducir el listado y ver, por ejemplo, sólo los cinco procesos que más consumen? Pulsad la tecla “N” y, a continuación, el número cinco.
¿Quieres obtener más info de la que te muestra top por defecto? Si pulsamos la tecla “F” nos aparecerá un listado de opciones: algunas de ellas aparecen ya marcadas con el asterisco a su lado (el PID del proceso, su usuario, la prioridad, etc.); sin embargo, algunas de esas opciones no están seleccionadas por defecto. Si deseamos ver también el consumo de swap, por ejemplo, tras pusar la tecla “F”, como hemos dicho, para luego pulsar la tecla “P”. Observaremos que en ese listado de opciones, aparece un asterisco justo al lado de esta letra. Pulsaremos Enter para volver al listado de top y ver cómo el consumo de swap ya aparece en él.



 Como se leen estos comandos.



Existe mucha confusión al interpretar el uso de la CPU mediante el top o mpstat. Una lectura incorrecta puede hacernos pensar que existe un determinado problema cuando en realidad es otro completamente diferente.

Unos ejemplos serían:
Un ejemplo de salida del consumo de CPU del top sería:
Cpu(s):  3.6%us,  0.9%sy,  0.1%ni, 95.1%id,  0.3%wa,  0.0%hi,  0.1%si,  0.0%st

En el mpstat veríamos:
09:22:45 AM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
09:22:45 AM  all    3.58    0.09    0.94    0.26    0.01    0.05    0.00   95.07     24.42

Vamos a ver que significan sus campos:
  • %user (en top: %us): Porcentaje de uso en el nivel de usuario
  • %sys (en top: %sy): Porcentaje de uso en el nivel del sistema (kernel). En el computo no se incluyen interrupciones
  • %iowait (en top %wa): Porcentaje del tiempo esperando operaciones de entrada/salida (I/O): Principalmente discos, red
  • %nice (en top %ni): Porcentaje del tiempo que un proceso de usuario se ejecuta con la prioridad variada con nice
  • %irq (en top %hi): Porcentaje del tiempo sirviendo interrupciones de hardware.
  • %soft (en top %si): Porcentaje del tiempo sirviendo interrupciones de software. Normalmente se tratan de llamadas al sistema, que se implementan mediante interrupciones de software.
  • %steal (en top %st): En kernels superiores al 2.6.11 son los ciclos dedicados a tareas como la virtualización.
  • %idle (en top %id): Tiempo en la que la CPU ha estado sin trabajo y sin estar esperando I/O
Resulta muy común que la gente se fije solamente en el indicador de %user (ni la suma de %user y %sys) para decidir como de ocupada esta la CPU. Aunque en algunos tipos de carga puede ser suficiente, no se puede generalizar porque un %user a 10% no significa que la CPU este libre, sino que puede estar esperando a discos. Así, debemos fijarnos también en el parámetro iowait.
Una mejor forma de ver rápidamente el consumo de CPU sería fijarnos en el idle, pero siempre se deben analizar el resto de indicadores.
Lo que finalmente nos debemos preguntar es: Es fiable esta información? Si y no, como todo muestreo tiene sus errores. En este caso la información de la CPU se recoge mediante la interrupción del timer, que mira en ese momento que esta haciendo la CPU por lo que podemos imaginar la siguiente situación:
  • Salta el timer, la CPU esta en el handler IDLE, por lo que se registra como tal y sigue.
  • Ocurre una interrupción y se sirve antes que vuelva a saltar el timer
  • Salta el timer, la CPU vuelve a estar con el handler IDLE, por lo que consideramos que todo el periodo ha estado IDLE
Esto no significa que los datos no sean fiables, simplemente que, como en todo muestreo, hay un error a tener en cuenta.

Comentarios