Netflix 很關注CPU的Steal Time。他們的策略是:如果是當前虛擬機的Steal Time 超過了你們設置的 閾值,他們會關閉這台虛擬機並且在另外一台物理機上面重啟。
如果你想要部署虛擬環境(例如:Amazon EC2), steal time就是你想要關注的性能指標之一。 如果這個指標的數值很高,那么說明機器狀態非常糟糕。什么是steal time?什么會引發高steal time?多少才是警戒值(你需要做什么)?
CPU Steal Time 的定義
From ibm:
Steal time is the percentage of time a virtual CPU waits for a real CPU while the hypervisor is servicing another virtual processor.
你的虛擬機(VM)會與虛擬環境的宿主機上的多個虛擬機實例共享物理資源。其中之一共享的就是CPU時間切片。如果你的VM的物理機虛擬比是1/4, 那么它的CPU使用率不會限制於25%的CPU時間切片-它能夠使用超過它設置的虛擬比。(有別於內存的使用,內存大小是嚴格控制的)。
哪里可以看到CPU Steal Time?
你可以使用Linux 的 TOP 命令來看到實時的一些性能指標。CPU相關的其中一行內容如下:
top
兩個你可能較為熟悉的是 %id(空閑 百分比) 和 %wa(I/O 等待 百分比)。 如果 %id 很低, 那么說明CPU的工作負載很大並且沒有多少計算負載能力剩余。 如果 %wa 很高,則說明瓶 CPU 處於等待計算的狀態,但是正在等待I/O活動的完成(類似 從數據庫中獲取存儲在 磁盤上 的一行數據)。
%st(percent steal time) 是CPU展示的最后一個性能指標。
CPU Steal Time - 類比售票廳
假設你打算買了若干張最新的好萊塢大片的電影票,且有兩條隊伍等待買票和一個售票口:
如果我們把 CPU steal time 性能指標 類比成 售票的過程, 那么過程就是如下:
-
0% Steal Time - 現在是禮拜三下午場:售票口正在工作,先處理第一條隊伍的電影觀眾,然后處理第二條,然后第一條,然后第二條,輪流進行。處理的很快,且沒有人在等待。
-
50% Steal Time - 現在是禮拜五晚上: 在隊伍中的一個人有一半的時間需要等待另一個在售票口的人完成賣票,而不能立刻買到票。賣票的時間更長了。
-
100% Steal Time - 現在是禮拜五晚上並且 現金出納金 壞了:所有人都在等待。
為什么高 Steal Time 會對web應用有更大的影響
如果有你在負載未滿的物理機器上面運行一個長時間的計算任務,那么它可能會使用超過它額定的CPU切片 時間。過一段時間,可能其他的VMs可能也會需要超過它們額定量的CPU切片 時間,所以這個任務的執行會變慢。對於長時間計算任務而言之,這個情況可能並不是不能接受的:它可能是會晚點一完成或者也可能更快的完成(由於它能夠使用更多的資源)。
然后,這種情況能夠時代web應用停止響應。對於實時任務,類似快速響應許多的web請求,性能下降到1/4會對請求隊列執行對應備選邏輯—中斷請求。
Steal Time遠高於0的原因
這里有兩種可能性:
-
你需要一個額定更多CPU資源的虛擬機(你的虛擬機是問題)
-
物理機已經超賣了並且多個虛擬機之間在激烈的競爭資源(你的虛擬機不是問題)
提示:你不能通過看當前被影響的虛擬機實例的CPU性能指標來判斷你所遇到的場景。(1 or 2) 當你有很多的虛擬宿主機上分別都部署了相同職責的服務程序(可能作為集群)時,就比較容易知道自己遇到的問題了。
-
是否 %st(CPU Steal Time Percentage) 在所有機器上面都上漲了?
這個意味着你的虛擬機在使用更多的CPU資源。你需要為你的虛擬起增加更多的CPU資源的配額。
-
是否%st(CPU Steal Time Percentage) 只在一部分機器上面陡峭增長?
這個意味着物理機器被超賣了。把你自己的虛擬機挪到另一個物理機器去吧。
所有,什么時候你應該擔心?
一般的參考標准-如果steal time 超過了10%並且持續了20分鍾,那么虛擬機就可能性能下降了
當這種情況發生:
-
關閉虛擬機並且挪到另一台物理機器上面
-
如果steal time維持在很高的數值, 那么增加CPU資源配額。
-
如果steal time維持在很高的數值, 聯系你的虛擬機提供商。你的虛擬機提供商有可能在超賣物理機。