linux高階工具命令 -- vmstat介紹

tolywang發表於2007-12-08
透過STATSPACK收集伺服器資訊,主要透過收集VMSTAT的資訊來展現伺服器狀況。VMSTAT工具是最常見的UNIX監控工具,可以展現給定時間間隔的伺服器的狀態值。
一般VMSTAT工具的使用是透過兩個數字引數來完成的,第一個引數是取樣的時間間隔數,單位是秒,第二個引數是取樣的次數。如:


[oracle@localhost oracle]$vmstat 2
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 195804 3812 40616 1598656 0 0 0 0 1024 66976 0 0 100 0
0 0 195804 3812 40616 1598656 0 0 0 12 1048 66961 0 0 100 0
0 0 195804 3812 40616 1598656 0 0 0 28 1054 67067 0 0 100 0
0 0 195804 3812 40616 1598656 0 0 0 0 1020 66988 0 0 100 0
(注:目前系統幾乎空閒,並且不同作業系統VMSTAT輸出內容有所不同)
目前說來,對於伺服器監控有用處的度量主要有:
r(執行佇列)

pi(頁匯入)

us(使用者CPU)

sy(系統CPU)

id(空閒)
(如果r經常大於4 ,且id經常少於40,表示cpu的負荷很重。)

(如果bi,bo 長期不等於0,表示記憶體不足)

透過VMSTAT識別CPU瓶頸
r(執行佇列)展示了正在執行和等待CPU資源的任務個數。當這個值超過了CPU數目,就會出現CPU瓶頸了

獲得CPU個數的命令(LINUX環境):
cat /proc/cpuinfo|grep processor|wc -l
當r值超過了CPU個數,就會出現CPU瓶頸,解決辦法大體幾種:
1. 最簡單的就是增加CPU個數
2. 透過調整任務執行時間,如大任務放到系統不繁忙的情況下進行執行,進爾平衡系統任務
3. 調整已有任務的優先順序

透過VMSTAT識別CPU滿負荷
首先需要宣告一點的是,vmstat中CPU的度量是百分比的。當us+sy的值接近100的時候,表示CPU正在接近滿負荷工作。但要注意的是,CPU 滿負荷工作並不能說明什麼,UNIX總是試圖要CPU儘可能的繁忙,使得任務的吞吐量最大化。唯一能夠確定CPU瓶頸的還是r(執行佇列)的值。

透過VMSTAT識別RAM瓶頸
資料庫伺服器都只有有限的RAM,出現記憶體爭用現象是Oracle的常見問題。
首先察看RAM的數量,命令如下(LINUX環境):
[oracle@oracle-db02 ~]$ free
total used free shared buffers cached
Mem: 2074924 2071112 3812 0 40616 1598656
-/+ buffers/cache: 431840 1643084
Swap: 3068404 195804 2872600

當然可以使用top等其他命令來顯示RAM。
當記憶體的需求大於RAM的數量,伺服器啟動了虛擬記憶體機制,透過虛擬記憶體,可以將RAM段移到SWAP&nbspDISK的特殊磁碟段上,這樣會 出現虛擬記憶體的頁匯出和頁匯入現象,頁匯出並不能說明RAM瓶頸,虛擬記憶體系統經常會對記憶體段進行頁匯出,但頁匯入操作就表明了伺服器需要更多的記憶體了, 頁匯入需要從SWAP&nbspDISK上將記憶體段複製回RAM,導致伺服器速度變慢。

解決的辦法有幾種:
1. 最簡單的,加大RAM
2. 改小SGA,使得對RAM需求減少
3. 減少RAM的需求(如:減少PGA)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-85087/,如需轉載,請註明出處,否則將追究法律責任。

相關文章