1. 程式人生 > >linux cpu顯示資訊

linux cpu顯示資訊

最近某臺服務機器偶爾遇到了一種告警:cpu steal 過高;諮詢了sre,sre解答是宿主機上的其它虛擬機器負載較高,cpu搶佔厲害;

正好藉此機會瞭解下cpu的相關資訊

=========================================================================

1 top命令輸出的cpu資訊

使用top命令檢視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 servicing/handling hardware interrupts

si:software irq or % cpu time servicing/handling software interrupts

st:cpu time in involuntary wait by virtual cpu while hypervisor is servcing another processor or cpu time stolen from a virtual machine

翻譯為:

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

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

ni:用作nice加權的程序分配的使用者態cpu時間比

id:空閒的cpu時間比

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

hi:硬中斷消耗時間

si:軟中斷消耗時間

st:虛擬機器偷取時間

2 cpu耗時百分比如何算出

2.1 sy和us


將檔案從src拷貝到dst,檔案會先從src讀取進核心空間,然後在讀取到使用者空間,然後拷貝資料到使用者空間的buf上,在通過使用者空間,核心空間,資料才到磁碟的dst上

從上面的程式看,cpu消耗在kernel space的時候就是sy,cpu消耗在user space的時候就是us

2.2 hi和si

如果程式沒有問題,就沒有hi和si,但實際上有硬中斷和軟中斷的概念;比如外設硬體故障,cpu會進行上下文切換,進行保持現場的操作,就是cpu會有段時間被硬中斷佔用了,這個時間就是hi;

相似的,si是軟中斷的cpu佔用時間,軟中斷是由軟體指令方式觸發的;

軟中斷和硬中斷可以參考:

https://blog.csdn.net/pxz_002/article/details/7327668

2.3 ni

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

nice是一個程序的優先順序修正值,為什麼會佔用cpu時間了?

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

2.4 wa

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

2.5 st

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

2.6 id

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


3 steal time

如果你想要部署虛擬環境(例如:Amazon EC2), steal time就是你想要關注的效能指標之一。 如果這個指標的數值很高,那麼說明機器狀態非常糟糕。什麼是steal time?什麼會引發高steal time?多少才是警戒值(你需要做什麼)?

你的虛擬機器(VM)會與虛擬環境的宿主機上的多個虛擬機器例項共享物理資源。其中之一共享的就是CPU時間切片。如果你的VM的物理機虛擬比是1/4, 那麼它的CPU使用率不會限制於25%的CPU時間切片-它能夠使用超過它設定的虛擬比。(有別於記憶體的使用,記憶體大小是嚴格控制的)。

cpu steal time 遠高於0的原因:

這裡有兩種可能性:

  1. 你需要一個額定更多CPU資源的虛擬機器(你的虛擬機器問題)

  2. 物理機已經超賣了並且多個虛擬機器之間在激烈的競爭資源(你的虛擬機器不是問題)

提示:你不能通過看當前被影響的虛擬機器例項的CPU效能指標來判斷你所遇到的場景。(1 or 2) 當你有很多的虛擬宿主機上分別都部署了相同職責的服務程式(可能作為叢集)時,就比較容易知道自己遇到的問題了。


  • 是否 %st(CPU Steal Time Percentage) 在所有機器上面都上漲了?

    這個意味著你的虛擬機器在使用更多的CPU資源。你需要為你的虛擬機器增加更多的CPU資源的配額。

  • 是否%st(CPU Steal Time Percentage) 只在一部分機器上面陡峭增長?

    這個意味著物理機器被超賣了。把你自己的虛擬機器挪到另一個物理機器去吧。

所以,什麼時候你應該擔心?

一般的參考標準-如果steal time 超過了10%並且持續了20分鐘,那麼虛擬機器就可能效能下降了

當這種情況發生:

  1. 關閉虛擬機器並且挪到另一臺物理機器上面

  2. 如果steal time維持在很高的數值, 那麼增加CPU資源配額。

  3. 如果steal time維持在很高的數值, 聯絡你的虛擬機器提供商。你的虛擬機器提供商有可能在超賣物理機

參考文章:

https://blog.csdn.net/jessysong/article/details/73571878

https://www.cnblogs.com/yjf512/p/3383915.html