Linux-cpu分析-vmstat__Linux
來源:互聯網
上載者:User
一. 前言 為了更方便的理解本篇內容含義,所以請最好看看如下繁瑣的概念,更容易理解。 沒懂這些概念,就算看完你就只能知道,運行下vmstat ,看看linux反饋結果而已,更要知其所以然嘛~ 先說說記憶體的概念。 不是講cpu嗎講它幹嘛。因為這個記憶體在互相轉換的時候是會消耗cpu的。至於為什麼要轉換。耐心往下看吧。 Linux系統的記憶體分為 實體記憶體 和 虛擬記憶體 兩種。 實體記憶體是真實的,也就是實體記憶體條上的記憶體。而虛擬記憶體則是採用硬碟空間補充實體記憶體(很關鍵,他倆速度不一樣有區別呀) ,將暫時不使用的記憶體頁寫到硬碟上以騰出更多的實體記憶體讓有需要的進程使用。當這些已被騰出的記憶體頁需要再次使用時才從硬碟(虛擬記憶體)中讀回記憶體。這一切對於使用者來說是透明的。通常對Linux系統來說,虛擬記憶體就是swap分區。
好了,下面引出本次的重頭戲: vmstat 。 vmstat (VirtualMeomoryStatistics,虛擬記憶體統計)是Linux中監控記憶體的常用工具,
可對作業系統的虛擬記憶體、進程、CPU等的整體情況進行監視
。 該命令可以顯示關於
系統各種資源之間相關效能的簡要資訊 ,這裡我們主要用它來看CPU的一個負載情況。
在系統中啟動並執行每個進程都需要使用到實體記憶體,但不是每個進程都需要每時每刻使用系統分配的記憶體空間。
當系統運行所需記憶體超過實際的實體記憶體,核心會釋放某些進程所佔用但未使用的部分或所有實體記憶體 ,將這部分資料儲存在磁碟上直到進程下一次調用,並將釋放出的記憶體提供給有需要的進程使用。【這就是上邊說的記憶體轉換的過程】 在 Linux 記憶體管理中,主要是通過“調頁Paging”和“交換Swapping”來完成上述的記憶體調度。調頁演算法是將記憶體中最近不常使用的頁面換到磁碟上,把活動頁面保留在記憶體中供進程使用。交換技術是將整個進程,而不是部分頁面,全部交換到磁碟上。分頁(Page)寫入磁碟的過程被稱作Page-Out,分頁(Page)從磁碟重新回到記憶體的過程被稱作Page-In。 當系統核心發現可運行記憶體變少時,就會通過Page-Out來釋放一部分實體記憶體。經管Page-Out不是經常發生,但是 如果Page-out頻繁不斷的發生,直到當核心管理分頁的時間超過運行程式的時間時,系統效能會急劇下降。 這時的系統已經運行非常慢或進入暫停狀態,這種狀態亦被稱作thrashing(顛簸)。 【上邊為什麼會消耗cpu的原因】
二.效果展示 vmstat 3 5 //每三秒輸出一條資訊,共輸出5條
新手來說,是不是有些蒙,別說聯合各項資料分析瓶頸了,先說說各個參數啥意思吧。 或者,換一種看法,下邊的注意很重要哦:
三.實際分析 1. r:運行隊列的等待進程數
r(run:運行隊列正在執行進程數)和 b(block等待CPU資源的進程個數)。
當r超過了CPU數目,就會出現CPU瓶頸了
。
查看CPU的核的數量: cat /proc/cpuinfo|grep processor|wc -l
在評估cpu的效能優劣時完全照搬網上說的幾倍幾倍是不準確的,不能只看top裡的參數,還得你自己動手看看vmstat顯示的run值和blocked值,當出現明 顯較多的blocked的時候,就說明cpu產生了瓶頸。而top命令和uptime命令顯示的負載均值,只能作為判斷系統過去某個時間段的狀態的參照, 與cpu的效能關係不大。
當r值超過了CPU個數,就會出現CPU瓶頸,解決辦法大體幾種: 1. 最簡單的就是增加CPU個數和核心數 2. 通過調整任務執行時間,如大任務放到系統不繁忙的情況下進行執行,進爾平衡系統任務 3. 調整已有任務的優先順序
( tips: vmstat中CPU的 度量是百分比的。當us+sy的值接近100的時候,表示CPU正在接近滿負荷工作。 但要注意的是,CPU 滿負荷工作並不能說明什麼,Linux總是試圖要CPU儘可能的繁忙,使得任務的輸送量最大化。 唯一能夠確定CPU瓶頸的還是r(運行隊列)的值。)
2.cpu使用率 如果CPU的id(空閑率)長期低於10% ,那麼表示CPU的資源已經非常緊張,應該考慮進程最佳化或添加更多地CPU。 wa(等待IO)表示CPU因等待IO資源而被迫處於空閑狀態,這時候的CPU並沒有處於運算狀態,而是被白白浪費了,所以“等待IO應該越小越好。”
【top命令和uptime命令顯示的負載均值,只能作為判斷系統過去某個時間段的狀態的參照, 與cpu的效能關係不大。】
文章推薦:
關於CPU的運行隊列與系統負載 : http://www.cnblogs.com/hecy/p/4128605.html
vmstat詳解 (包含執行個體分析): http://blog.chinaunix.net/uid-20775448-id-3668337.html
2. sar命令 檢查CPU效能的第二個工具是sar,sar功能很強大,可以對系統的每個方面進行單獨的統計,但是使用sar命令會增加系統開銷,不過這些開銷是可以評估的,對系統的統計結果不會有很大影響。 下面是sar命令對某個系統的CPU統計輸出:
點擊(
此處
)摺疊或開啟 [root@webserver ~]# sar -u 3 5 Linux 2.6.9-42.ELsmp (webserver) 11/28/2008 _i686_ (8 CPU) 11:41:24 AM CPU %user %nice %system %iowait %steal %idle 11:41:27 AM all 0.88 0.00 0.29 0.00 0.00 98.83 11:41:30 AM all 0.13 0.00 0.17 0.21 0.00 99.50 11:41:33 AM all 0.04 0.00 0.04 0.00 0.00 99.92 11:41:36 AM all 0.29 0.00 0.13 0.00 0.00 99.58 11:41:39 AM all 0.38 0.00 0.17 0.04 0.00 99.41 Average: all 0.34 0.00 0.16 0.05 0.00 99.45
對上面每項的輸出解釋如下: %user列顯示了使用者進程消耗的CPU 時間百分比。 %nice列顯示了運行正常進程所消耗的CPU 時間百分比。 %system列顯示了系統進程消耗的CPU時間百分比。 %iowait列顯示了IO等待所佔用的CPU時間百分比 %steal列顯示了在記憶體相對緊張的環境下pagein強制對不同的頁面進行的steal操作 。 %idle列顯示了CPU處在空閑狀態的時間百分比。 這個輸出是對系統整體CPU使用狀況的統計,每項的輸出都非常直觀,並且最後一行Average是個合計列,是上面統計資訊的一個平均值。 需要注意的一點是:第一行的統計資訊中包含了sar本身的統計消耗,所以%user列的值會偏高一點,不過,這不會對統計結果產生多大影響。 在一個多CPU的系統中,如果程式使用了單線程,會出現這麼一個現象,CPU的整體使用率不高,但是系統應用卻響應緩慢,這可能是由於程式使用單線程的原因,單線程只使用一個CPU,導致這個CPU佔用率為100%,無法處理其它請求,而其它的CPU卻閑置,這就導致 了整體CPU使用率不高,而應用緩慢 現象的發生 。 針對這個問題,可以對系統的每個CPU分開查詢,統計每個CPU的使用方式:
點擊(
此處
)摺疊或開啟 [root@webserver ~]# sar -P 0 3 5 Linux 2.6.9-42.ELsmp (webserver) 11/29/2008 _i686_ (8 CPU) 06:29:33 PM CPU %user %nice %system %iowait %steal %idle 06:29:36 PM 0 3.00 0.00 0.33 0.00 0.00 96.67 06:29:39 PM 0 0.67 0.00 0.33 0.00 0.00 99.00 06:29:42 PM 0 0.00 0.00 0.33 0.00 0.00 99.67 06:29:45 PM 0 0.67 0.00 0.33 0.00 0.00 99.00 06:29:48 PM 0 1.00 0.00 0.33 0.33 0.00 98.34 Average: 0 1.07 0.00 0.33 0.07 0.00 98.53 這個輸出是對系統的第一顆CPU的資訊統計,需要注意的是,sar中對CPU的計數是從0開始的,因此,“sar -P 0 3 5”表示對系統的第一顆CPU進行資訊統計,“sar -P 4 3 5”則表示對系統的第五顆CPU進行統計。依次類推。可以看出,上面的系統有八顆CPU。
3 iostat命令 iostat指令主要用於統計磁碟IO狀態,但是也能查看CPU的使用資訊,它的局限性是只能顯示系統所有CPU的平均資訊,看下面的一個輸出:
點擊(
此處
)摺疊或開啟 [root@webserver ~]# iostat -c Linux 2.6.9-42.ELsmp (webserver) 11/29/2008 _i686_ (8 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 2.52 0.00 0.30 0.24 0.00 96.96 在這裡,我們使用了“-c”參數,只顯示系統CPU的統計資訊,輸出中每項代表的含義與sar命令的輸出項完全相同,不再詳述。
1.4 uptime命令 uptime是監控系統效能最常用的一個命令,主要用來統計系統當前的健全狀態,輸出的資訊依次為:系統現在的時間、系統從上次開機到現在運行了多長時間、系統目前有多少登陸使用者、系統在一分鐘內、五分鐘內、十五分鐘內的平均負載。看下面的一個輸出:
點擊(
此處
)摺疊或開啟 [root@webserver ~]# uptime 18:52:11 up 27 days, 19:44, 2 users, load average: 0.12, 0.08, 0.08
這裡需要注意的是load average這個輸出值,這三個值的大小一般不能大於系統CPU的個數,例如,本輸出中系統有8個CPU,如果load average的三個值長期大於8時,說明CPU很繁忙,負載很高,可能會影響系統效能,但是偶爾大於8時,倒不用擔心,一般不會影響系統效能。相反,如果load average的輸出值小於CPU的個數,則表示CPU還有閒置時間片,比如本例中的輸出,CPU是非常閒置。