2012-09-07 32 views
5

Una de las aplicaciones de mi C++ muestra un porcentaje muy alto de CPU en la parte superior, pero la carga es bastante baja. myapp siempre toma alrededor del 30%, que se muestra en la parte superior del comando "superior", pero la carga es siempre igual a 0.00, por lo que estoy confundido ¿cuáles son las diferencias entre la carga y la columna% CPU?% Columna de la CPU y carga en la parte superior

top - 14:09:54 up 62 days, 2:52, 1 user, load average: 0.00, 0.00, 0.00 
Tasks: 124 total, 1 running, 123 sleeping, 0 stopped, 0 zombie 
Cpu0 : 0.0%us, 0.0%sy, 0.0%ni, 99.7%id, 0.3%wa, 0.0%hi, 0.0%si, 0.0%st 
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni, 99.3%id, 0.3%wa, 0.0%hi, 0.3%si, 0.0%st 
Mem: 2054824k total, 1440364k used, 614460k free,  4644k buffers 
Swap: 4194296k total, 16604k used, 4177692k free, 610784k cached 

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND                       
14774 root  20 0 1201m 9416 1856 S 28.3 0.5 376:13.50 myapp                       
14746 mysql  20 0 2012m 157m 3888 S 0.3 7.8 5:01.08 mysqld                       

¿Alguien me puede decir que entienda las diferencias entre% CPU y carga?

¡Gracias de antemano!

Respuesta

6

% CPU se muestra en por ejemplo top es intantaneous, es decir, lo que se está utilizando en ese momento, mientras que la carga mostrado por uptime es un promedio:

Se convencionalmente aparece en la forma de tres números que representan la carga del sistema durante los últimos períodos de de uno, cinco y quince minutos.

de Wikipedia.

Con el tiempo, estos deberían converger, pero mientras% CPU es 100% máximo, la carga puede ser mayor que 1 cuando hay procesos en espera. Por ejemplo:

Por ejemplo, uno puede interpretar un promedio de carga de "1,73 0,50 7,98" en un sistema sola CPU como:

durante el último minuto, la CPU estaba sobrecargado por 73% (1 CPU con 1,73 procesos ejecutables, de modo que 0,73 procesos tuvieron que esperar un giro)

durante los últimos 5 minutos, la CPU se underloaded 50% (no hay procesos tuvieron que esperar un giro)

durante el los últimos 15 minutos, la CPU se sobrecargó 698% (1 CPU con 7.98 de ejecución ejecutable eses, de modo que 6,98 procesos tuvieron que esperar su turno )

Actualización:

que sólo ahora se dio cuenta de que su proceso estaba usando 28% de la CPU mientras top informaron ambas CPUs a ser> 99% ocioso. No pude reproducir esto en mi sistema Linux (Ubuntu 12.04, Intel i7-3770K quadcore HT), vea las capturas de pantalla a continuación.

configuración normal, sin carga, que muestra el uso de CPU promedio durante todos los núcleos:

top - 18:10:04 up 7:50, 2 users, load average: 0.00, 0.05, 0.15 
Tasks: 157 total, 1 running, 156 sleeping, 0 stopped, 0 zombie 
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Mem: 16528224k total, 1124956k used, 15403268k free, 148772k buffers 
Swap: 15624188k total,  0k used, 15624188k free, 670460k cached 

    PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
    7022 root  20 0  0 0 0 S 0 0.0 0:00.14 kworker/0:1   
    1 root  20 0 3640 2060 1324 S 0 0.0 0:01.23 init    
    2 root  20 0  0 0 0 S 0 0.0 0:00.00 kthreadd   
    3 root  20 0  0 0 0 S 0 0.0 0:00.14 ksoftirqd/0   
    6 root  RT 0  0 0 0 S 0 0.0 0:00.00 migration/0 

carga completa en un núcleo (que se ejecuta yes > /dev/null), que muestra el uso de CPU promedio durante todos los núcleos:

top - 18:11:58 up 7:52, 2 users, load average: 0.11, 0.07, 0.15 
Tasks: 157 total, 2 running, 155 sleeping, 0 stopped, 0 zombie 
Cpu(s): 12.5%us, 0.0%sy, 0.0%ni, 87.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Mem: 16528224k total, 1124880k used, 15403344k free, 148824k buffers 
Swap: 15624188k total,  0k used, 15624188k free, 670472k cached 

    PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND   
8254 tim  20 0 4188 280 228 R 100 0.0 0:04.88 yes     
    1 root  20 0 3640 2060 1324 S 0 0.0 0:01.23 init    
    2 root  20 0  0 0 0 S 0 0.0 0:00.00 kthreadd   
    3 root  20 0  0 0 0 S 0 0.0 0:00.15 ksoftirqd/0   
    6 root  RT 0  0 0 0 S 0 0.0 0:00.00 migration/0   

Igual que 2), pero que muestra el uso de CPU por núcleo:

top - 18:13:47 up 7:54, 2 users, load average: 0.86, 0.36, 0.24 
Tasks: 157 total, 2 running, 155 sleeping, 0 stopped, 0 zombie 
Cpu0 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Cpu2 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Cpu3 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Cpu4 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Cpu5 :100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Cpu6 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Mem: 16528224k total, 1124756k used, 15403468k free, 148840k buffers 
Swap: 15624188k total,  0k used, 15624188k free, 670472k cached 

    PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND   
8254 tim  20 0 4188 280 228 R 100 0.0 1:53.98 yes     
    1 root  20 0 3640 2060 1324 S 0 0.0 0:01.23 init    
    2 root  20 0  0 0 0 S 0 0.0 0:00.00 kthreadd   
    3 root  20 0  0 0 0 S 0 0.0 0:00.15 ksoftirqd/0   
    6 root  RT 0  0 0 0 S 0 0.0 0:00.00 migration/0   

NB: hice notar que las primeras estadísticas top espectáculos no muestran el uso de la CPU del 100% para yes, similar a que tienes. Tal vez ese era el problema?

+0

lo extraño es que myapp siempre tarda alrededor de 30 en la columna% CPU, pero la carga nunca supera 0,10. –

+1

Eso podría deberse a que la carga también mide otros recursos además de la CPU, o porque hay varias CPU en el sistema. Esto debe describirse en detalle en las páginas de manual. – Tim

+0

puede ver que ambas cargas de la CPU están inactivas sobre el 99% –

Cuestiones relacionadas