視野、格局、胸懷、魄力
---無
參考資料:https://man.linuxde.net/vmstat
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時間和一些後臺的程序,釋放內存的佔用。