Como medir el consumo del CPU en Linux

0 Comments

La utilizacion del procesdor en sistemas linux se debe a los diferentes procesos o servicios que puede correr un servidor Linux. A continuacion les mostrare comandos o herramientas para poder detectar cuellos de botella, uso de CPU y resolver problemas de desempeño.

Top

El comando top provee una vista en tiempo real del sistema. Despliega un resumen de la informacion del sistema asi como listado de tareas que estan siendo ejecutadas por el kernel.

:~$ top
top - 17:53:29 up 2 days,  7:59,  3 users,  load average: 0.54, 0.38, 0.41
Tasks: 185 total,   1 running, 184 sleeping,   0 stopped,   0 zombie
Cpu0  :  4.9%us,  0.7%sy,  0.0%ni, 93.7%id,  0.2%wa,  0.1%hi,  0.4%si,  0.0%st
Cpu1  :  4.9%us,  0.8%sy,  0.0%ni, 93.7%id,  0.2%wa,  0.1%hi,  0.4%si,  0.0%st
Cpu2  :  5.2%us,  0.8%sy,  0.0%ni, 93.3%id,  0.2%wa,  0.1%hi,  0.4%si,  0.0%st
Cpu3  :  5.1%us,  0.8%sy,  0.0%ni, 93.3%id,  0.2%wa,  0.1%hi,  0.4%si,  0.0%st
Mem:   3963916k total,  3926568k used,    37348k free,    72776k buffers
Swap:  5855652k total,    62360k used,  5793292k free,  2928928k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
13474 www-data  20   0  154m  26m 3080 S   14  0.7   7:52.26 python
16519 www-data  20   0  157m  38m 3064 S    6  1.0   6:12.95 python
  922 root      20   0  175m 5544 3264 S    2  0.1   7:05.27 iftop

Como podran ver el comando nos despliega el porcentaje de utilizacion del tiempo de CPU. En el ejemplo vemos un sistema de multiples procesadores (entorno SMP)

Utilizar mpstat para medir la utilizacion de CPU en linux

Ahora es necesario instalar el paquete sysstat para poder utilizar las herramientas citadas a continuacion:

Debian/Ubuntu

:~# apt-get install sysstat

RHEL

:~# up2date sysstat

Desplegar el uso de cada CPU individualmente con mpstat

Si tienen multiples procesadores o SMP lo qu es algo comun con el Core2 o Core Duo, tecleamos el comando

root@Rocknrolla:~# mpstat
Linux 2.6.32-27-generic (Rocknrolla)     01/19/2011     _x86_64_    (2 CPU)

09:49:17 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
09:49:17 PM  all   28.99    0.28    5.21    1.14    0.42    0.12    0.00    0.00   63.84

Elk comando mpstat despliega las actividades de cada procesador disponible, siendo el procesador 0 el primero. Las actividades globales de todos los procesadores son reportadas ya sea en arquitecturas SMP o UP.

root@Rocknrolla:~# mpstat -P ALL
Linux 2.6.32-27-generic (Rocknrolla)     01/19/2011     _x86_64_    (2 CPU)

09:53:52 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
09:53:52 PM  all   29.20    0.44    5.24    1.13    0.42    0.12    0.00    0.00   63.45
09:53:52 PM    0   27.86    0.25    5.52    1.74    0.37    0.24    0.00    0.00   64.02
09:53:52 PM    1   30.50    0.62    4.97    0.54    0.47    0.01    0.00    0.00   62.90

Reportar el uso de CPU utilizando el comando sar

Antes de utilizar sar debemos de configurarlo, ver este articulo si tienen problemas con el mismo.

Para mostrar la actividad del CPU, tecleamos:

:~$ sar
Linux 2.6.32-27-generic (betuntu)     21/01/11     _i686_    (1 CPU)

00:00:01        CPU     %user     %nice   %system   %iowait    %steal     %idle
00:05:00        all      1.56      0.10      0.48      1.23      0.00     96.63
00:15:01        all      1.57      0.09      0.46      1.03      0.00     96.84
00:25:01        all      1.56      0.10      0.49      1.11      0.00     96.74
00:35:01        all      1.57      0.09      0.47      1.14      0.00     96.73
00:45:00        all      1.55      0.10      0.48      1.05      0.00     96.82
00:55:01        all      1.57      0.10      0.44      1.13      0.00     96.77
...
...
11:05:01        all     33.89      3.72     36.05      0.68      0.00     25.66
11:15:01        all     31.45      5.32     50.00      2.12      0.00     11.11
11:25:00        all     38.32      3.98     36.19      0.96      0.00     20.55
11:35:01        all     39.27      3.73     27.49      3.30      0.00     26.22
Media:          all      7.90      0.68      4.56      1.40      0.00     85.45

Lo que hemos visto anteriormente es el contenido de la actividad acumulada de los contadores en el sistema operativo. Por ejemplo para ver el uso de CPU cada 2 segundos en 5 repeticiones, tecleamos;

:~$ sar -u 2 5
Linux 2.6.32-27-generic (betuntu)     21/01/11     _i686_    (1 CPU)

11:48:37        CPU     %user     %nice   %system   %iowait    %steal     %idle
11:48:39        all     32.16      0.00      3.02      0.00      0.00     64.82
11:48:41        all     28.86      0.00      4.48      3.48      0.00     63.18
11:48:43        all     41.71      0.50      5.53      0.50      0.00     51.76
11:48:45        all     44.00      0.00      7.00      0.00      0.00     49.00
11:48:47        all     35.00      0.00     10.50      2.50      0.00     52.00
Media:          all     36.34      0.10      6.11      1.30      0.00     56.16

Donde,

  1. %user: Porcentaje de utilizacion del CPU mientras se ejecutaba a nivel de usuario (aplicacion)
  2. %nice: Porcentaje de utilizacion del CPU mientras se ejecutaba a nivel de usuario con prioridad nice
  3. %system: Porcentaje de utilizacion del CPU mientras se ejecutaba a nivel de sistema (kernel)
  4. %iowait: Porcentaje de tiempo durante el cual el CPU o CPUs estuvieron desocupados o libres mientras el sistema tuvo peticiones sobresalientes de I/O
  5. %idle: Porcentaje de tiempo durante el cual el CPU o CPUs estuvieron desocupados mientras el sistema no presento peticiones sobresalientes de I/O

Como determinar que proceso esta consumiendo los CPUs

Para administrar un equipo efectivamente debemos de poder conocer rapidamente los procesos o aplicaciones que se comen los recursos de procesador. Con este fin les presento el siguiente comando para saber cual proceso o procesos monopolizan los ciclos de CPU;

:~$ ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10

O

:~$ ps -eo pcpu,pid,user,args | sort -r -k1 | less
%CPU   PID USER     COMMAND
 7.1 27289 1000     ktorrent --icon ktorrent -caption KTorrent
38.8 24863 1000     /usr/lib/firefox-3.6.13/firefox-bin
 3.5  1032 root     /usr/bin/X :0 -nr -verbose -auth /var/run/gdm/auth-for-gdm-g0WPgI/database -nolisten tcp vt7
 3.4 27729 1000     amarokapp
 1.2 24913 1000     /usr/lib/firefox-3.6.13/plugin-container /usr/lib/flashplugin-installer/libflashplayer.so 24863 plugin true
 0.8  2177 1000     /usr/bin/pulseaudio --start --log-target=syslog
 0.3 25968 1000     wish8.5 /usr/bin/amsn
 0.2  2229 1000     python /usr/lib/gnomenu/GnoMenu.py --oaf-activate-iid=OAFIID:GNOME_GnoMenu_Factory --oaf-ior-fd=18
 0.1    41 root     [kondemand/0]

Como podemos ver, el sistema es una maquina de escritorio, ya que el firefox es el que se esta comiendo todo los recursos. El comando ps despliega todos los procesos (-e), ademas del formato definido por el usuario (-o pcpu). El primer campo es pcpu, la utilizacion del CPU. Esta ordenado para desplegar los 10 procesos que mas utilizan el procesador.

El comando iostat en Linux

Tambien podemos utilizar el comando iostat, el cual nos reporta las estadisticas del CPU para dispositivos y particiones.

:~$ iostat -xtc 5 3
Linux 2.6.32-27-generic (betuntu)     21/01/11     _i686_    (1 CPU)

21/01/11 17:55:22
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
 32.49    0.52    6.89    2.31    0.00   57.79

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               1.63    35.16    7.32    3.62   503.54   309.61    74.34     0.64   58.35   5.02   5.49
sdb               0.06     0.02    0.01    0.07     0.07    15.83   197.83     0.48 5984.86  43.70   0.35

21/01/11 17:55:27
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
 55.60    0.00    4.60    1.80    0.00   38.00

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    20.60    0.40    1.60   102.40   177.60   140.00     0.02   12.40  12.00   2.40
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

21/01/11 17:55:32
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
 45.09    0.00    6.21    0.60    0.00   48.10

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     3.01    1.60    0.60   251.70    28.86   127.27     0.02   10.55   6.55   1.44
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

Gracias a las herramientas que he descrito a continuacion, podremos facilmente detectar las fallas de rendimiento en nuestro sistema, o los cuellos de botella en procesamiento.

One Reply to “Como medir el consumo del CPU en Linux”

Deja tus preguntas o comentarios