Linux必知必會--vmstat

視野、格局、胸懷、魄力

         ---無

 

參考資料:https://man.linuxde.net/vmstat

     http://www.ha97.com/4512.html

 

vmstat命令的含義爲顯示虛擬內存,它可報告關於進程、內存、I/0等系統整體運行狀態。

 

語法

vmstat 選項 參數

 

參數:

 

事件間隔:狀態信息刷新的時間間隔

 

次數:顯示報告的次數

 

示例:

 

vmstat 1   

 

每隔1s輸出一次

 

vmstat 1 5

 

每個1s輸出一次,一共輸出5次

 

字段說明

 

procs:

 

r:運行隊列中進程數量,這個值也可以判斷是否需要增加CPU

 

b:等待I/O的數量

 

Memory:

 

swpd:使用虛擬內存的大小,如果swpd的值不爲0.但是SI、SO的值增長期爲0.這種情況不會影響系統性能。

 

free:空閒物理內存大小

 

buff:用作緩衝的內存大小

 

cache:用作緩存的內存大小,如果cache的值大時,說明cache處的文件數多,如果頻繁訪問到的文件都能被cache處,那麼磁盤的讀IO、bi會非常小

 

swap:

 

si:每秒從交換寫到內存的大小,由磁盤調入內存

 

so:每秒寫入交換區的內存大小,由內存調入磁盤

 

注:內存夠用的時候,這2個值都是0,如果這2個值長期大於0的時候,系統性能會受到影響,磁盤IO和CPU資源都會被消耗。有些朋友看到空閒內存(free)很少或者接近於0的時候,就認爲內存不夠用了,不能光看這一點,還要結合si和so。如果free很少,但是si和so也很少(大多時候是0),那麼不必擔心,系統性能這時候不會受到影響。

 

IO:

 

bi:每秒讀取的塊數

 

bo:每秒寫入的塊數

 

注:隨機磁盤讀寫的時候,這2個值越大(如超出1024K),能看到CPU在IO等待的值也會變大。

  

System:

 

in:每秒中斷數,包括時鐘中斷

 

cs:每秒上下文切換數

 

注:上面2個值越大,會看到由內核消耗的CPU時間會越大。

 

CPU:(百分比)

 

us:用戶進程執行時間百分比

 

us的值比較高的時候,說明用戶進行消耗CPU時間多,但是如果長期超50%的使用,那麼我們就應該考慮優化程序算法或者進行加速。

 

sy:內核系統進程執行時間百分比

 

注:sy的值越高時。說明系統內核消耗的cpu資源多,這並不是良性表現,應該檢查原因。

 

wa:IO等待時間百分比

 

wa的值高時,說明IO等待比較嚴重,這可能由於磁盤大量作隨機訪問造成,也有可能磁盤出現瓶頸(塊操作)

 

id:空閒時間百分比 

 

總結:

目前說來,對於服務器監控有用處的度量主要有:

r(運行隊列)
pi(頁導入)
us(用戶CPU)
sy(系統CPU)
id(空閒)
注意:如果r經常大於4 ,且id經常少於40,表示cpu的負荷很重。如果bi,bo 長期不等於0,表示內存不足。

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

Linux下查看CPU核心數的命令:
cat /proc/cpuinfo|grep processor|wc -l

當r值超過了CPU個數,就會出現CPU瓶頸,解決辦法大體幾種:

1. 最簡單的就是增加CPU個數和核數
2. 通過調整任務執行時間,如大任務放到系統不繁忙的情況下進行執行,進爾平衡系統任務
3. 調整已有任務的優先級

通過vmstat識別CPU滿負荷:

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

通過vmstat識別RAM瓶頸:

數據庫服務器都只有有限的RAM,出現內存爭用現象是Oracle的常見問題。

首先用free查看RAM的數量:
[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

當內存的需求大於RAM的數量,服務器啓動了虛擬內存機制,通過虛擬內存,可以將RAM段移到SWAP DISK的特殊磁盤段上,這樣會 出現虛擬內存的頁導出和頁導入現象,頁導出並不能說明RAM瓶頸,虛擬內存系統經常會對內存段進行頁導出,但頁導入操作就表明了服務器需要更多的內存了, 頁導入需要從SWAP DISK上將內存段複製回RAM,導致服務器速度變慢。

解決的辦法有幾種:

1. 最簡單的,加大RAM;
2. 改小SGA,使得對RAM需求減少;
3. 減少RAM的需求。(如:減少PGA)

如果disk經常不等於0,且在b中的隊列大於3,表示io性能不好。

1.)如果在processes中運行的序列(process r)是連續的大於在系統中的CPU的個數表示系統現在運行比較慢,有多數的進程等待CPU。

2.)如果r的輸出數大於系統中可用CPU個數的4倍的話,則系統面臨着CPU短缺的問題,或者是CPU的速率過低,系統中有多數的進程在等待CPU,造成系統中進程運行過慢。

3.)如果空閒時間(cpu id)持續爲0並且系統時間(cpu sy)是用戶時間的兩倍(cpu us)系統則面臨着CPU資源的短缺。

解決辦法:

當發生以上問題的時候請先調整應用程序對CPU的佔用情況.使得應用程序能夠更有效的使用CPU.同時可以考慮增加更多的CPU.  關於CPU的使用情況還可以結合mpstat,  ps aux top  prstat –a等等一些相應的命令來綜合考慮關於具體的CPU的使用情況,和那些進程在佔用大量的CPU時間.一般情況下,應用程序的問題會比較大一些.比如一些sql語句不合理等等都會造成這樣的現象.

內存問題現象:

內存的瓶頸是由scan rate (sr)來決定的.scan rate是通過每秒的始終算法來進行頁掃描的.如果scan rate(sr)連續的大於每秒200頁則表示可能存在內存缺陷.同樣的如果page項中的pi和po這兩欄表示每秒頁面的調入的頁數和每秒調出的頁數.如果該值經常爲非零值,也有可能存在內存的瓶頸,當然,如果個別的時候不爲0的話,屬於正常的頁面調度這個是虛擬內存的主要原理.

解決辦法:
1.調節applications & servers使得對內存和cache的使用更加有效.

2.增加系統的內存.

3. Implement priority paging in s in pre solaris 8 versions by adding line “set priority paging=1” in /etc/system. Remove this line if upgrading from Solaris 7 to 8 & retaining old /etc/system file.

關於內存的使用情況還可以結ps aux top  prstat –a等等一些相應的命令來綜合考慮關於具體的內存的使用情況,和那些進程在佔用大量的內存.一般情況下,如果內存的佔用率比較高,但是,CPU的佔用很低的時候,可以考慮是有很多的應用程序佔用了內存沒有釋放,但是,並沒有佔用CPU時間,可以考慮應用程序,對於未佔用CPU時間和一些後臺的程序,釋放內存的佔用。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章