2012-09-07 31 views
5

我的一個C++應用程序顯示非常高的%CPU,但負載很低。 myapp總是需要大約30%,顯示在「top」命令的最頂端,但加載總是像0.00,所以我很困惑加載和%CPU列之間有什麼區別?%CPU列和負載在頂部

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                       

誰能告訴我理解%CPU和負載之間的區別嗎?

預先感謝您!

回答

6

%例如top中示出的CPU是intantaneous,即什麼在該時間被使用,同時通過uptime所示的負載是平均:

它通常出現在的形式三個數字代表 系統在最後一分鐘,五分鐘和十五分鐘 期間的負載。

Wikipedia

隨着時間的推移,這些應該會收斂,但是當%CPU是最大值100%時,當有進程在等待時,負載可能會高於1。例如:

例如,一個可以解釋的「1.73 0.50 7.98」一個 單CPU系統上的平均負載:最後一分鐘期間

中,CPU是由73%過載( 1個CPU與1.73運行進程,使0.73進程必須等待期間最後5分鐘一轉)

,則CPU被欠載50%(無處理必須等待轉彎)在

過去15分鐘,CPU超載698%(1個CPU,7.98可運行程序esses,使6.98進程不得不等待 轉)

更新:

我現在才發現,你的過程是用28%的CPU,而top報告兩個CPU> 99%閒。我無法在我的Linux系統(Ubuntu 12.04,Intel i7-3770K quadcore HT)上重現這一點,請參閱下面的截圖。

正常設置,無負載,示出了CPU使用率平均超過所有核:

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 

滿載在一個核心(運行yes > /dev/null),示出的CPU使用率平均超過所有核:

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   

同2),但顯示每個內核的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   

注:我沒注意,第一統計top顯示不顯示100%的CPU使用率yes,類似你有什麼。也許這就是問題所在?

+0

奇怪的是,myapp在%CPU列中總是需要30個左右,但負載永遠不會超過0.10。 –

+1

這可能是因爲負載還會測量CPU以外的其他資源,或者因爲系統中有多個CPU。這應該在手冊中詳細描述。 – Tim

+0

你可以看到兩個CPU負載空閒超過99% –