vmstat 1    1表示每秒採集一次
vmstat 2 1    2表示2秒採集一次,1表示只採集一次ios

r 表示運行隊列(就是說多少個進程真的分配到CPU)
    我測試的服務器目前CPU比較空閒,沒什麼程序在跑,當這個值超過了CPU數目,就會出現CPU瓶頸了。這個也和top的負載有關係,通常負載超過了3就比較高,超過了5就高,超過了10就不正常了,服務器的狀態很危險。top的負載相似每秒的運行隊列。若是運行隊列過大,表示你的CPU很繁忙,通常會形成CPU使用率很高。
b 表示阻塞的進程,這個很少說,進程阻塞,你們懂的。
swpd 虛擬內存已使用的大小
    若是大於0,表示你的機器物理內存不足了,若是不是程序內存泄露的緣由,那麼你該升級內存了或者把耗內存的任務遷移到其餘機器。
free   空閒的物理內存的大小
buff 設備和設備之間的緩衝
     Linux/Unix系統是用來存儲,目錄裏面有什麼內容,權限等的緩存
cache  cpu和內存之間的緩衝
    cache直接用來記憶咱們打開的文件,給文件作緩衝,我本機大概佔用300多M(這裏是Linux/Unix的聰明之處,把空閒的物理內存的一部分拿來作文件和目錄的緩存,是爲了提升 程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。)
si  每秒從磁盤讀入虛擬內存的大小,若是這個值大於0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。個人機器內存充裕,一切正常。
so  每秒虛擬內存寫入磁盤的大小,若是這個值大於0,同上。
bi  塊設備每秒接收的塊數量,這裏的塊設備是指系統上全部的磁盤和其餘塊設備,默認塊大小是1024byte
    我本機上沒什麼IO操做,因此一直是0,可是我曾在處理拷貝大量數據(2-3T)的機器上看過能夠達到140000/s,磁盤寫入速度差很少140M每秒
bo 塊設備每秒發送的塊數量,例如咱們讀取文件,bo就要大於0。bi和bo通常都要接近0,否則就是IO過於頻繁,須要調整。
in 每秒CPU的中斷次數,包括時間中斷
cs 每秒上下文切換次數
    例如咱們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,咱們通常作性能測試時會進行幾千併發甚至幾萬併發的測試,選擇web服務器的進程能夠由進程或者線程的峯值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,咱們的代碼就會進入內核空間,致使上下文切換,這個是很耗資源,也要儘可能避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,致使CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。
us 用戶CPU時間
    我曾經在一個作加密解密很頻繁的服務器上,能夠看到us接近100,r運行隊列達到80(機器在作壓力測試,性能表現不佳)。
sy 系統CPU時間,若是過高,表示系統調用時間長,例如是IO操做頻繁。
id  空閒 CPU時間,通常來講,id + us + sy = 100,通常我認爲id是空閒CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。
wa 等待IO CPU時間。nginx

重點參數    r,b,swpd,free,buff,cache,si,so,bi,boweb

性能分析信息:算法

IO/CPU/men連鎖反應
    1.free急劇降低
    2.buff和cache被回收降低,但也無濟於事
    3.依舊須要使用大量swap交換分區swpd
    4.等待進程數,b增多
    5.讀寫IO,bi bo增多
    6.si so大於0開始從硬盤中讀取
    7.cpu等待時間用於 IO等待,wa增長
內存不足
    1.開始使用swpd,swpd不爲0
    2.si so大於0開始從硬盤中讀取
io瓶頸:
    1.讀寫IO,bi bo增多超過2000
    2.cpu等待時間用於 IO等待,wa增長 超過20
    3.sy 系統調用時間長,IO操做頻繁會致使增長 >30%
    4.wa io等待時間長
        iowait% <20%            良好
        iowait% <35%            通常
        iowait% >50%
    5.進一步使用iostat觀察
CPU瓶頸:load,vmstat中r列
    1.反應爲CPU隊列長度
    2.一段時間內,CPU正在處理和等待CPU處理的進程數之和,直接反應了CPU的使用和申請狀況。
    3.理想的load average:核數*CPU數*0.7
        CPU個數:grep 'physical id' /proc/cpuinfo | sort -u
        核數:grep 'core id' /proc/cpuinfo | sort -u | wc -l
    4.超過這個值就說明已是CPU瓶頸了
CPU瓶頸
    1.us 用戶CPU時間高超過90%
涉及到web服務器,cs 每秒上下文切換次數
    例如咱們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,咱們通常作性能測試時會進行幾千併發甚至幾萬併發的測試,選擇web服務器的進程能夠由進程或者線程的峯值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,咱們的代碼就會進入內核空間,致使上下文切換,這個是很耗資源,也要儘可能避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,致使CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。
    1.cs能夠對apache和nginx線程和進程數限制起到必定的參考做用
    2.咱們通常作性能測試時會進行幾千併發甚至幾萬併發的測試,選擇web服務器的進程能夠由進程或者線程的峯值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了
較好的趨勢:主要是 swap使用少,swpd數值低。si so分頁讀取寫入數值趨近於零sql