2012-12-09 62 views
8

我使用Debian下運行的單核小ARM處理器,並有瞭解頂部的CPU利用率輸出的問題,請參見:瞭解Linux的頂級CPU利用率輸出

top - 15:31:54 up 30 days, 23:00, 2 users, load average: 0.90, 0.89, 0.87 
Tasks: 44 total, 1 running, 43 sleeping, 0 stopped, 0 zombie 
Cpu(s): 65.0%us, 20.3%sy, 0.0%ni, 14.5%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st 
Mem:  61540k total, 40056k used, 21484k free,  0k buffers 
Swap:  0k total,  0k used,  0k free, 22260k cached 

    PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND                      
26028 root  20 0 2536 1124 912 R 1.9 1.8 0:00.30 top                       
31231 root  19 -1 45260 964 556 S 1.9 1.6 1206:15 owserver                     
    3 root  15 -5  0 0 0 S 0.3 0.0 0:08.68 ksoftirqd/0                     
    694 root  20 0 28640 840 412 S 0.3 1.4 468:26.74 rsyslogd   

列%的CPU是非常低的了所有的過程,在這個例子中它們都是4,4%(下面的所有其他過程都是0%) 但是第3行的全部CPU顯示65%的我們和20%的sy,所以對於非常高的值 - 順便說一下,這是系統的感覺:非常慢:-( 系統幾乎總是處於這種狀態:所有進程的CPU非常低,但用戶+系統CPU很高。 有人可以解釋爲什麼有這樣的啊頂級工具輸出中的高度不一致? 我可以使用什麼工具來更好地找出導致高用戶+系統CPU使用率的原因 - 頂端在這裏似乎毫無用處。

更新:同時我發現這個線程here,其中討論了一個類似的問題,但我無法驗證什麼是寫有:

  • 命令正常運行時間顯示平均CPU利用率每1/5/15分鐘
  • 這是接近頂部的第一行輸出的總和%us +%sy。但是這個變化更大,也許是每10秒的平均值?
  • 即使在頂部輸出看時間較長,%美國+%SY的總和總是比所有%CPU的總結高出幾倍

感謝 阿希姆

回答

6

你應該閱讀manpagetop更加敏銳地理解它的輸出。從手冊頁:

%的CPU - CPU使用率

自上次屏幕更新經過的CPU時間的任務的份額,表示爲CPU總時間的百分比。默認屏幕更新時間爲3秒,可以使用#top -d ss.tt更改。要測量通用CPU使用率,請運行top -S

-S:累計時間模式切換頂級

開始與最後的記憶 'S' 狀態逆轉。當「累積模式」處於開啓狀態時,每個進程都會列出它及其死去的孩子使用的CPU時間。

CPU狀態顯示在摘要區域中。它們總是以百分比表示,並且是從現在到最後一次刷新之間的時間。

us -- User CPU time 
     The time the CPU has spent running users' processes that are not niced. 

    sy -- System CPU time 
     The time the CPU has spent running the kernel and its processes. 

    ni -- Nice CPU time 
     The time the CPU has spent running users' proccess that have been niced. 

    wa -- iowait 
     Amount of time the CPU has been waiting for I/O to complete. 

    hi -- Hardware IRQ 
     The amount of time the CPU has been servicing hardware interrupts. 

    si -- Software Interrupts 
     The amount of time the CPU has been servicing software interrupts. 

    st -- Steal Time 
     The amount of CPU 'stolen' from this virtual machine by the hypervisor for other tasks (such as running another virtual machine). 

在正常情況下,%us +%sy應該始終更高。