Linux中在使用top命令的時候會看到這麼一行:linux
裏面的各個值分別是什麼意思呢?ios
今天被問到這個問題,發現答的不是很清楚。果真啊,每天用最多的top命令都還沒摸透。。。慚愧。。。因而就查了些資料:spa
Cpu(s)表示的是cpu信息。各個值的意思是:.net
好了,若是說列出上面的條條框框說我懂了,那真是自欺欺人了。下面是我本身的理解翻譯
好比一秒內有100個cpu時間片,這個cpu時間片就是cpu工做的最小單位。那麼這100個cpu時間片在不一樣的區域和目的進行操做使用,就表明這個區域所佔用的cpu時間比。也就是這裏得出的cpu時間百分比。unix
好比下面一個程序:code
將文件從磁盤的src位置拷貝到磁盤的dst位置。文件會從src先讀取進入到內核空間,而後再讀取到用戶空間,而後拷貝數據到用戶空間的buf上,再經過用戶空間,內核空間,數據纔到磁盤的dst上。htm
因此從上面這個程序來看,cpu消耗在kernel space的時候就是sy(系統態使用的cpu百分比),cpu消耗在user space的時候就是us(用戶態使用的cpu百分比)。blog
若是程序都沒什麼問題,那麼是沒有hi和si的,可是實際上有個硬中斷和軟中斷的概念。好比硬中斷,cpu在執行程序的時候,忽然外設硬件(好比硬盤出現問題了)機器須要馬上通知cpu進行現場保存工做。這個時候會cpu會出現上下文切換。就是cpu會有一部分時間會被硬中斷佔用了,這個時間就是hi。相相似,si是軟中斷的cpu佔用時間,軟中斷是由軟件的指令方式觸發的。進程
相關軟中斷和硬中斷的概念能夠參考:
http://blog.csdn.net/pxz_002/article/details/7327668
ni是nice的意思,nice是什麼呢,每一個linux進程都有個優先級,優先級高的進程有優先執行的權利,這個叫作pri。進程除了優先級外,還有個優先級的修正值。即好比你原先的優先級是20,而後修正值爲-2,那麼你最後的進程優先級爲18。這個修正值就叫作進程的nice值。
ni是指用作nice加權的進程使用的用戶態cpu時間比,個人理解就是一個進程的所謂修正值就意味着多分配一些cpu時間給這個進程的用戶態,這個中間所多分配的cpu時間就是咱們這裏的ni。(這個理解沒啥把握,若是有錯誤麻煩幫忙指出下)
wa指的是CPU等待磁盤寫入完成的時間,就是說前提是要進行IO操做,在進行IO操做的時候,CPU等待時間。好比上面那個程序,最後一步,從系統空間到dst硬盤空間的時候,若是程序是阻塞的,那麼這個時候cpu就要等待數據寫入磁盤才能完成寫操做了。因此這個時候cpu等待的時間就是wa。
st的名字很生動,偷取。。。是專門對虛擬機來講的,一臺物理是能夠虛擬化出幾臺虛擬機的。在其中一臺虛擬機上用top查看發現st不爲0,就說明原本有這麼多個cpu時間是安排給我這個虛擬機的,可是因爲某種虛擬技術,把這個cpu時間分配給了其餘的虛擬機了。這就叫作偷取。
剩下的id就是除了上面那麼多cpu處理上下文之外的cpu時間片。固然在這些時間片上,cpu是空閒的。
題外話,有個dstat命令也是能夠查看cpu的信息的。下圖就是dstat -c的顯示
其中能夠很容易將usr和us,sys和sy,idl和id,wai和wa,hig和hi,siq和si對應起來
可是能夠觀察到dstat是沒有st,ni的統計的,並且它的全部部分加起來總和可能沒有100,這就說明dstat實際是沒有對st,ni作cpu統計的。使用的時候要注意下這個。
http://hi.baidu.com/higkoo/item/70600834426247483075a1df
http://blog.csdn.net/codestinity/article/details/7496962