1. 程式人生 > 實用技巧 >Linux 效能分析 top iostat vmstat free

Linux 效能分析 top iostat vmstat free

最近看到一大牛的分析報告,才知道筆者以前認識這4個命令是多麼膚淺,其實要讀懂記憶體的資訊,是要一些功力的。

1、top

151509728.jpg

VIRT 虛擬記憶體總量,VIRT=SWAP+RES

SWAP 使用的虛擬記憶體中被換出的大小

RES 程序使用的、未被換出的實體記憶體大小

SHR 共享記憶體大小,單位kb

S 程序狀態

%MEM 程序使用的實體記憶體百分比

%CPU CPU時間佔用百分比

Mem: 191272k total 實體記憶體總量

173656k used 使用的實體記憶體總量

17616k free 空閒記憶體總量

22052k buffers 用作核心快取的記憶體量

Swap: 192772k total 交換區總量

0k used

使用的交換區總量

192772k free 空閒交換區總量

123988k cached緩衝的交換區總量。記憶體中的內容被換出到交換區,而後又被換入到記憶體,但使用過的交換區尚未被覆蓋,該數值即為這些內容已存在於記憶體中的交換區的大小。相應的記憶體再次被換出時可不必再對交換區寫入。


2、free

155430158.jpg主要關注值

Mem 實體記憶體統計

total 實體記憶體總量。

used 總計分配給快取(包含buffers 與cache )使用的數量

free 未被分配的記憶體
shared 共享記憶體
buffers 系統分配但未被使用的buffers 數量,
兩種主要Cache方式之一,針對磁碟塊的讀寫(塊裝置快取)
cached 系統分配但未被使用的cache 數量,

兩種主要Cache方式之一,針對檔案inode的讀寫(檔案系統快取)

-/+buffers/cached 實體記憶體的快取統計

used (第一行Mem值)used - buffers -cached ,系統實際使用的記憶體總量

free (第一行Mem值)buffers + cached ,系統當前實際可用記憶體

Mem 從作業系統層面分析,buffers cached是已分配的(已使用)記憶體

-/+ buffers/cached 從應用程式層面分析,buffers cached是隨時都可以拿來用的,而且是優先使用的

Swap交換分割槽的使用情況


3、vmstat

164528940.jpg

r 表示執行佇列, 值超過了CPU數目,就會出現CPU瓶頸

b 表示阻塞的程序,觀察iowait值,通常是由於IO等待引起

swpd 虛擬記憶體已使用的大小,如果大於0,表示實體記憶體不足,注意程式記憶體洩露

free 空閒的實體記憶體的大小

buff

cache 直接記憶開啟的檔案,給檔案做緩衝,Linux/Unix把空閒的實體記憶體的一部分拿來做檔案和目錄的快取,是為了提高程式執行的效能,當程式使用記憶體時,buffer/cached會很快地被使用

如果cache值較大,相應的bi會減少

si 每秒從磁碟讀入虛擬記憶體的大小(俗稱換進),值大於0,表示實體記憶體不夠或者記憶體洩露

so 每秒虛擬記憶體寫入磁碟的大小(俗出換出),值大於0,表示實體記憶體不夠或者記憶體洩露

如果swpd值不為0,但si so值長期為0,這種情況不會影響系統性能,但如果值長期大於0,CPU資源和IO資源都會受影響,系統性能下降

bi 從塊裝置讀入的資料總量(讀磁碟)(KB/s)

bo 寫入到塊裝置的資料總理(寫磁碟)(KB/s)

in 每秒CPU的中斷次數,包括時間中斷

cs 每秒上下文切換次數,例如我們呼叫系統函式,就要進行上下文切換,執行緒的切換,也要程序上下文切換,這個值要越小越好,太大了,要考慮調低執行緒或者程序的數目,例如在apache和nginx這種web伺服器中,我們一般做效能測試時會進行幾千併發甚至幾萬併發的測試,選擇web伺服器的程序可以由程序或者執行緒的峰值一直下調,壓測,直到cs到一個比較小的值,這個程序和執行緒數就是比較合適的值了。系統呼叫也是,每次呼叫系統函式,我們的程式碼就會進入核心空間,導致上下文切換,這個是很耗資源,也要儘量避免頻繁呼叫系統函式。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的

us 使用者CPU時間

sy 系統CPU時間,如果太高,表示系統呼叫時間長,例如是IO操作頻繁

id 空閒 CPU時間

wt 等待IOCPU時間


4、iostat

iostat option <interval> <count>

-c 顯示CPU

-d 顯示Device,通常指磁碟

-p 顯示磁碟分割槽資訊,不能與-x同時使用

-k 單位為KB

-m 單位為MB

-n 顯示NFS資訊

-t 顯示時間,與AIX的時間顯示有差別

-x 顯示更詳細資訊

常用命令1:iostat

103158352.jpg

常用命令2:iostat -x

103901480.jpg

rrqm/s 每秒進行 merge 的讀運算元目,即 delta(rmerge)/s
wrqm/s
每秒進行 merge 的寫運算元目,即 delta(wmerge)/s
r/s
每秒完成的讀 I/O 裝置次數,即 delta(rio)/s
w/s
每秒完成的寫 I/O 裝置次數。即delta(wio)/s

兩值相加=iops,磁碟效能三大分析因素之一,尤其是小檔案的系統
rsec/s 每秒讀扇區數,即delta(rsect)/s
wsec/s:
每秒寫扇區數,即delta(wsect)/s
rkB/s 每秒讀K位元組數,是 rsect/s 的一半,因為每扇區大小為512位元組
wkB/s 每秒寫K位元組數,是 wsect/s 的一半
avgrq-sz 平均每次裝置I/O操作的資料大小(扇區),delta(rsect+wsect)/delta(rio+wio)
avgqu-sz 平均I/O佇列長度,即delta(aveq)/s/1000 (因為aveq的單位為毫秒)

await 平均每次裝置I/O操作的等待時間 (毫秒), delta(ruse+wuse)/delta(rio+wio)
svctm
平均每次裝置I/O操作的服務時間 (毫秒), delta(use)/delta(rio+wio)

服務時間,俗稱響應時間,資料庫尤其注得此值

%util: 一秒中有百分之多少的時間用於 I/O 操作,或者說一秒中有多少時間 I/O 佇列是非空的


僅讀懂上述每個引數的意義是不夠的,我們應該分析引數之間的關聯關係,即一個引數的變化會引起另一個引數的上下波動

從而找出系統真正的瓶勁,好對症下藥。


轉載於:https://blog.51cto.com/1216621479/1272130