1. 程式人生 > >性能測試中vmstat命令的常見使用。

性能測試中vmstat命令的常見使用。

比較 程序 例如 -s read pen 負載 寫入 線程數

vmstat是Linux中常用的一個命令,尤其是在進行性能測試時,使用該命令,往往能輔助我們進行性能問題定位。

我們先看一下這個命令執行得到的數據。

[[email protected] ~]# vmstat 1 10
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 486716 2798308 586292 636208 0 0 7 9 0 0 1 1 98 0 0
0 0 486716 2798300 586300 636212 0 0 0 140 381 714 1 0 99 0 0
0 0 486716 2798448 586300 636232 0 0 0 40 378 685 1 0 99 1 0
0 0 486716 2798448 586300 636236 0 0 0 0 316 595 0 0 100 0 0
0 0 486716 2797912 586300 636236 0 0 0 0 388 662 1 0 99 0 0
0 0 486716 2797780 586304 636236 0 0 0 36 432 693 1 0 99 0 0
0 0 486716 2797912 586304 636236 0 0 0 4 407 667 1 0 99 0 0
0 0 486716 2798076 586304 636236 0 0 0 40 384 685 0 0 100 0 0
0 0 486716 2798076 586304 636236 0 0 0 28 387 672 1 0 99 0 0
0 0 486716 2798076 586304 636236 0 0 0 0 408 703 1 0 99 0 0

一下子看到這麽多數據,這些都代表什麽意思呢。我們就來詳細了解一下。

r 表示運行隊列(就是說多少個進程真的分配到CPU),我測試的服務器目前CPU比較空閑,沒什麽程序在跑,當這個值超過了CPU數目,就會出現CPU瓶頸了。這個也和top的負載有關系,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,服務器的狀態很危險。top的負載類似每秒的運行隊列。如果運行隊列過大,表示你的CPU很繁忙,一般會造成CPU使用率很高。

b 表示阻塞的進程,這個不多說,進程阻塞。

swpd 虛擬內存已使用的大小。

free 空閑的物理內存的大小,就是還有多少物理內存沒有被使用。

buff Linux/Unix系統的緩存。

cache cache直接用來記憶我們打開的文件,給文件做緩沖,把空閑的物理內存的一部分拿來做文件和目錄的緩存,是為了提高 程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用,當空閑的內存不足時,這些緩存的內存便可以釋放出來。

si 每秒從磁盤讀入虛擬內存的大小,如果這個值大於0,表示物理內存不夠用,這個值一般可以真實反映當前的內存是否是一個瓶頸。

so 每秒虛擬內存寫入磁盤的大小,如果這個值大於0,同上。

bi 塊設備每秒接收的塊數量,這裏的塊設備是指系統上所有的磁盤和其他塊設備,默認塊大小是1024byte

bo 塊設備每秒發送的塊數量,例如我們讀取文件,bo就要大於0

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時間。

st 顯示虛擬機管理器在服務另一個虛擬處理器時虛擬CPU處在非自願等待下花費時間的百分比

vmstat 還可以對disk做很多的分析

vmstat

-d prints disk statistics
-D prints disk table
-p prints disk partition statistics

-d可以看到磁盤讀寫的統計分析情況

[[email protected] ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
ram0 0 0 0 0 0 0 0 0 0 0
ram1 0 0 0 0 0 0 0 0 0 0
ram2 0 0 0 0 0 0 0 0 0 0
ram3 0 0 0 0 0 0 0 0 0 0
ram4 0 0 0 0 0 0 0 0 0 0
ram5 0 0 0 0 0 0 0 0 0 0
ram6 0 0 0 0 0 0 0 0 0 0
ram7 0 0 0 0 0 0 0 0 0 0
ram8 0 0 0 0 0 0 0 0 0 0
ram9 0 0 0 0 0 0 0 0 0 0
ram10 0 0 0 0 0 0 0 0 0 0
ram11 0 0 0 0 0 0 0 0 0 0
ram12 0 0 0 0 0 0 0 0 0 0
ram13 0 0 0 0 0 0 0 0 0 0
ram14 0 0 0 0 0 0 0 0 0 0
ram15 0 0 0 0 0 0 0 0 0 0
loop0 0 0 0 0 0 0 0 0 0 0
loop1 0 0 0 0 0 0 0 0 0 0
loop2 0 0 0 0 0 0 0 0 0 0
loop3 0 0 0 0 0 0 0 0 0 0
loop4 0 0 0 0 0 0 0 0 0 0
loop5 0 0 0 0 0 0 0 0 0 0
loop6 0 0 0 0 0 0 0 0 0 0
loop7 0 0 0 0 0 0 0 0 0 0
sr0 74 31 420 110 0 0 0 0 0 0
vda 414443 55553 18904174 1090533 35245086 17395288 369987052 50346547 0 21164
dm-0 13839 0 110712 92343 134397 0 1075160 1425251 0 33
dm-1 50438 0 1589578 373204 6086424 0 48691256 13801110 0 4859
dm-2 25159 0 741386 93574 13641485 0 109131760 58280348 0 6306
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
dm-3 226921 0 12979482 374950 3402653 0 26807368 150029045 0 2094
dm-4 848 0 8290 4074 21437012 0 171496064 37658599 0 7910
dm-5 15903 0 373610 50583 1107064 0 8856472 60806220 0 300
dm-6 135554 0 3074754 677070 485621 0 3884928 26750658 0 393
vdb 4921867 7619 968706386 2063218 22670735 108363892 998454992 19180459 0 9238
dm-7 4928923 0 968701410 2144859 127417700 0 998454912 773663155 0 9277

-D 可以以匯總的方式查看到磁盤的各項讀寫的情況。

[[email protected] ~]# vmstat -D
35 disks
2 partitions
10733969 total reads
63203 merged reads
1975190202 read sectors
6964518 milli reading
231628817 writes
125759350 merged writes
2736845900 written sectors
1191942088 milli writing
0 inprogress IO
61574 milli spent IO

-p可以看到每個分區的情況

[[email protected] ~]# vmstat -p /dev/vda1
vda1 reads read sectors writes requested writes
879 22098 260 44044

性能測試中vmstat命令的常見使用。