歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

關於top之後的那些數據

官方解釋

Cpu(s)表示的是cpu信息。各個值的意思是:

us: user cpu time (or) % CPU time spent in user space

sy: system cpu time (or) % CPU time spent in kernel space

ni: user nice cpu time (or) % CPU time spent on low priority processes

id: idle cpu time (or) % CPU time spent idle

wa: io wait cpu time (or) % CPU time spent in wait (on disk)

hi: hardware irq (or) % CPU time spent servicing/handling hardware interrupts

si: software irq (or) % CPU time spent servicing/handling software interrupts

st: steal time - - % CPU time in involuntary wait by virtual cpu while hypervisor is servicing another processor (or) % CPU time stolen from a virtual machine

翻譯一下:

us:用戶態使用的cpu時間比

sy:系統態使用的cpu時間比

ni:用做nice加權的進程分配的用戶態cpu時間比

id:空閒的cpu時間比

wa:cpu等待磁盤寫入完成時間

hi:硬中斷消耗時間

si:軟中斷消耗時間

st:虛擬機偷取時間

好了,如果說列出上面的條條框框說我懂了,那真是自欺欺人了。下面是我自己的理解

首先這個百分比是怎麼算出來的呢?

比如一秒內有100個cpu時間片,這個cpu時間片就是cpu工作的最小單位。那麼這100個cpu時間片在不同的區域和目的進行操作使用,就代表這個區域所占用的cpu時間比。也就是這裡得出的cpu時間百分比。比如下面一個程序:

將文件從磁盤的src位置拷貝到磁盤的dst位置。文件會從src先讀取進入到內核空間,然後再讀取到用戶空間,然後拷貝數據到用戶空間的buf上,再通過用戶空間,內核空間,數據才到磁盤的dst上。 所以從上面這個程序來看,cpu消耗在kernel space的時候就是sy(系統態使用的cpu百分比),cpu消耗在user space的時候就是us(用戶態使用的cpu百分比)。

好了,下面說說hi和si

如果程序都沒什麼問題,那麼是沒有hi和si的,但是實際上有個硬中斷和軟中斷的概念。比如硬中斷,cpu在執行程序的時候,突然外設硬件(比如硬盤出現問題了)機器需要立刻通知cpu進行現場保存工作。這個時候會cpu會出現上下文切換。就是cpu會有一部分時間會被硬中斷占用了,這個時間就是hi。相類似,si是軟中斷的cpu占用時間,軟中斷是由軟件的指令方式觸發的。相關軟中斷和硬中斷的概念可以參考:http://blog.csdn.net/pxz_002/article/details/7327668

下面是ni

ni是nice的意思,nice是什麼呢,每個linux進程都有個優先級,優先級高的進程有優先執行的權利,這個叫做pri。進程除了優先級外,還有個優先級的修正值。即比如你原先的優先級是20,然後修正值為-2,那麼你最後的進程優先級為18。這個修正值就叫做進程的nice值。

那麼nice是一個進程的優先級修正值,為什麼會占用cpu時間呢?

ni是指用做nice加權的進程使用的用戶態cpu時間比,我的理解就是一個進程的所謂修正值就意味著多分配一些cpu時間給這個進程的用戶態,這個中間所多分配的cpu時間就是我們這裡的ni。(這個理解沒啥把握,如果有錯誤麻煩幫忙指出下)

下面是wa

wa指的是CPU等待磁盤寫入完成的時間,就是說前提是要進行IO操作,在進行IO操作的時候,CPU等待時間。比如上面那個程序,最後一步,從系統空間到dst硬盤空間的時候,如果程序是阻塞的,那麼這個時候cpu就要等待數據寫入磁盤才能完成寫操作了。所以這個時候cpu等待的時間就是wa。

所以如果一台機器看到wa特別高,那麼一般說明是磁盤IO出現問題,可以使用iostat等命令繼續進行詳細分析。

下面是st

st的名字很生動,偷取。。。是專門對虛擬機來說的,一台物理是可以虛擬化出幾台虛擬機的。在其中一台虛擬機上用top查看發現st不為0,就說明本來有這麼多個cpu時間是安排給我這個虛擬機的,但是由於某種虛擬技術,把這個cpu時間分配給了其他的虛擬機了。這就叫做偷取。

id

剩下的id就是除了上面那麼多cpu處理上下文以外的cpu時間片。當然在這些時間片上,cpu是空閒的。

top的所有這些cpu時間應該是相加為100%的。

dstat

題外話,有個dstat命令也是可以查看cpu的信息的。下圖就是dstat -c的顯示

其中可以很容易將usr和us,sys和sy,idl和id,wai和wa,hig和hi,siq和si對應起來但是可以觀察到dstat是沒有st,ni的統計的,而且它的所有部分加起來總和可能沒有100,這就說明dstat實際是沒有對st,ni做cpu統計的。使用的時候要注意下這個。
Copyright © Linux教程網 All Rights Reserved