背景:
在Xen環境下,內存與CPU分配是可以動態改變的。通過動態更改內存與CPU分配,可以達到優化虛擬機性能的目的。
通常情況下,我們的虛擬機分配物理cpu的資源為自動分配的。當在一個物理機器上面分配多個虛擬機,並且虛擬機的cpu總和超過實際物理機器的cpu數量時,並且各個虛擬機在高負載的情況下,高負載的虛擬機會調用其他虛擬機器的資源
這次發現的問題是我們公司某系統新上線了三台虛機服務器,上線後發現,在流量是平均分配的前提下,新上的機器的負載比老機器高,新上的機器負載在8左右,而老機器的負載在4左右,查詢了機器的配置和參數設置,新老機器都一樣。後來通過iostat指令,發現新機票的steal值非常高,大於在40左右,而老機器的steal只有0.1左右。經與老大咨詢,steal的值高會代表實體機的CPU負載高。後經由老大發現,新上線的三台虛擬機在一台實體機上,每個虛機分配了四個CPU,而實體機是個8CPU的服務器,導致了三個虛機之間征用CPU。(cpu要打開超線程!!!)
檢查方法
1,檢查系統狀態
# iostat 1
avg-cpu: %user %nice %system %iowait %steal %idle
61.58 0.00 22.66 0.00 13.30 2.46
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
avg-cpu: %user %nice %system %iowait %steal %idle
58.77 0.00 23.70 0.00 17.54 0.00
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
xvda 8.49 0.00 520.75 0 552
xvda1 0.00 0.00 0.00 0 0
從這裡我們可以看到 %steal 的值變化比較多,也就說明存在虛擬加之間在爭用CPU的資源。
2. 檢查各個虛擬機分配的CPU資源是否和物理機器的CPU資源一致。
1. 如發現虛擬機的cpu資源(數量)大於物理機器的CPU資源。檢查物理機器是否已經打開超線程,如果沒有打開,需要打開。
2. 重啟虛擬機後,檢查資源是否還是解決。如果發現%steal 值恢復正常。問題解決。
附上一篇參考資料 http://www.linuxidc.com/Linux/2012-05/60941p2.htm
通俗一點來講:把CPU比作人,那麼沒有超線程時這個人只用右手干活。有了超線程之後,左右手同時干不同的事情。在一定程度上提高了效率。