2012-09-07 9 views
5

Una delle mie applicazioni C++ mostra una CPU% molto elevata in alto, ma il carico è piuttosto basso. myapp prende sempre circa il 30%, mostrando in cima al comando "top", ma il carico è sempre come 0.00, quindi sono confuso quali sono le differenze tra carico e colonna% CPU?% Colonna CPU e carico nella parte superiore

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                       

Qualcuno può dirmi capire le differenze tra% CPU e carico?

Grazie in anticipo!

risposta

6

% CPU illustrato in per esempio top è intantaneous, cioè quello che viene utilizzato in quel momento, mentre il carico dimostrato da uptime è una media:

Appare convenzionalmente in forma di tre numeri che rappresentano il carico del sistema durante gli ultimi periodi dell'uno, cinque e quindici minuti.

da Wikipedia.

Nel tempo questi dovrebbero convergere, ma mentre% CPU è al 100% massimo, il carico può essere superiore a 1 quando ci sono processi in attesa. Ad esempio:

per esempio, si può interpretare un carico medio di "1,73 0,50 7,98" a un sistema singola CPU:

durante l'ultimo minuto, la CPU è stata sovraccaricata del 73% (1 CPU con 1,73 processi eseguibili, in modo che 0,73 processi hanno dovuto attendere per un turno)

durante gli ultimi 5 minuti, la CPU è stata sottocarico 50% (nessun processo dovuto aspettare per un turno)

durante la gli ultimi 15 minuti, la CPU è stata sovraccaricata del 698% (1 CPU con 7.98 proc eseguibili esses, in modo che 6,98 processi hanno dovuto aspettare un turno)

Aggiornamento:

io solo ora notato che il processo è stato utilizzato il 28% della CPU durante top riferito entrambe le CPU di essere> 99% inattivo. Non ero in grado di riprodurlo sul mio sistema Linux (Ubuntu 12.04, Intel i7-3770K quadcore HT), vedere schermate sotto.

configurazione normale, senza carico, che mostra l'utilizzo della CPU media su tutti i core:

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 

pieno carico su un nucleo (in esecuzione yes > /dev/null), che mostra l'utilizzo della CPU media su tutti i core:

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   

Uguale a 2), ma che mostra per core utilizzo della CPU:

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: Ho fatto notare che le prime statistiche top spettacoli non mostrano l'utilizzo della CPU al 100% per yes, simile a cos'hai. Forse era questo il problema?

+0

la cosa strana è che myapp prende sempre circa 30 nella colonna% CPU, ma il carico non supera mai lo 0,10. –

+1

Ciò potrebbe essere dovuto al fatto che il carico misura anche altre risorse oltre alla CPU o perché nel sistema sono presenti più CPU. Questo dovrebbe essere descritto in dettaglio nelle manpage. – Tim

+0

è possibile vedere entrambi i carichi della CPU sono inattivi oltre il 99%. –