前言
如果性能測(cè)試的目標(biāo)服務(wù)器是linux系統(tǒng)吼畏,在如何使用linux自帶的命令來(lái)實(shí)現(xiàn)性能測(cè)試過(guò)程的監(jiān)控分析呢?
對(duì)于日常性能測(cè)試來(lái)講嘁灯,在linux下或是類Unix系統(tǒng)泻蚊,我們必須掌握以下常用的指標(biāo)查看命令。
- ps
- pstree
- top
- free
- vmstat
- iostat
- iotop
- sar
當(dāng)然還有其他命令丑婿,這里就上述筆者常用的命令推薦大家掌握性雄。
ps
ps命令能給出當(dāng)前系統(tǒng)中進(jìn)程的快照没卸。下面我們列舉幾個(gè)常用的選項(xiàng),對(duì)于其他的請(qǐng)參考官方文檔或是自行搜索相關(guān)文檔秒旋。
- 使用 -a 參數(shù)约计。-a 代表 all。同時(shí)加上x(chóng)參數(shù)會(huì)顯示沒(méi)有控制終端的進(jìn)程迁筛。
ps -ax
- 通過(guò)我們會(huì)查找某類或包含某些指定關(guān)鍵字的進(jìn)程煤蚌,這是會(huì)使用管道結(jié)合grep命令來(lái)進(jìn)一步過(guò)濾結(jié)果。
例如查找java相關(guān)的進(jìn)程
ps -ax | grep java
- 有時(shí)我們則需要根據(jù)CPU和內(nèi)存的使用情況來(lái)過(guò)濾排序篩選結(jié)果瑰煎,這樣便于快速找到哪個(gè)進(jìn)程最耗CPU铺然、內(nèi)存
ps -aux
- 根據(jù)CPU的使用升序排序
ps -aux --sort -pcpu
- 根據(jù)內(nèi)存使用升序排序
ps -aux --sort -pmem
- 上述兩個(gè)命令合并一起,如下:
ps -aux --sort -pcpu,+pmem
- 只顯示前幾個(gè)進(jìn)程酒甸,例如顯示前十個(gè),需要使用管道結(jié)合head命令赋铝。
ps -aux | head -n 10
還有很多用法插勤,這里就不做過(guò)多的列舉。
pstree
pstree命令以樹(shù)狀圖顯示進(jìn)程間的關(guān)系革骨。
下面我們看幾個(gè)常用的示例农尖。
- 以樹(shù)狀圖顯示進(jìn)程,只顯示進(jìn)程的名字良哲,且相同進(jìn)程合并顯示盛卡。
pstree
- 以樹(shù)狀圖顯示進(jìn)程,還顯示進(jìn)程PID筑凫。
pstree -p
- 以樹(shù)狀圖顯示進(jìn)程PID為<pid>的進(jìn)程以及子孫進(jìn)程滑沧,如果有-p參數(shù)則同時(shí)顯示每個(gè)進(jìn)程的PID。
pstree <pid>
或
pstree -p <pid>
- 以樹(shù)狀圖顯示進(jìn)程巍实,相同名稱的進(jìn)程不合并顯示滓技,并且會(huì)顯示命令行參數(shù),如果有-p參數(shù)則同時(shí)顯示每個(gè)進(jìn)程的PID棚潦。
pstree -a
為什么要用pstree命令令漂,通過(guò)該命令,能讓你更清晰的了解你要監(jiān)控的目標(biāo)服務(wù)關(guān)聯(lián)了哪些資源丸边,能讓你更加清楚其資源關(guān)聯(lián)情況叠必,增加在性能測(cè)試過(guò)程中分析的準(zhǔn)確性。
不管是ps還是pstree命令妹窖,在性能測(cè)試過(guò)程中纬朝,最重要的一個(gè)應(yīng)用技巧就是獲取資源消耗最高的目標(biāo)進(jìn)程的線程id。例如:
ps -mp <pid> -o HTREAD
或
ps -Lfp <pid>
<pid> 為目標(biāo)進(jìn)程id
在找到其線程id后就可以使用
printf "%x\n" 線程id
轉(zhuǎn)換成十六進(jìn)制數(shù)
然后結(jié)合jstack命令嘱吗,獲取其堆棧信息以供分析玄组。
top
top命令是Linux下常用的性能分析工具滔驾,能夠?qū)崟r(shí)顯示系統(tǒng)中各個(gè)進(jìn)程的資源占用狀況,類似于Windows的任務(wù)管理器俄讹。
與ps不同的是哆致,top顯示系統(tǒng)當(dāng)前的進(jìn)程和其他狀況,是一個(gè)動(dòng)態(tài)顯示過(guò)程,即可以通過(guò)用戶按鍵來(lái)不斷刷新當(dāng)前狀態(tài)。
直接使用即可
top
常規(guī)情況下主要關(guān)注以下指標(biāo):
- load average: 0.02, 0.10, 0.13 系統(tǒng)負(fù)載患膛,即任務(wù)隊(duì)列的平均長(zhǎng)度摊阀。三個(gè)數(shù)值分別為 1分鐘、5分鐘踪蹬、15分鐘前到現(xiàn)在的平均值胞此。
- total 進(jìn)程總數(shù)
- running 正在運(yùn)行的進(jìn)程數(shù)
- sleeping 睡眠的進(jìn)程數(shù)
- stopped 停止的進(jìn)程數(shù)
- zombie 僵尸進(jìn)程數(shù)
Cpu(s):
- us 用戶空間占用CPU百分比
- sy 內(nèi)核空間占用CPU百分比
- id 空閑CPU百分比
Mem:
- total 物理內(nèi)存總量
- used 使用的物理內(nèi)存總量
- free 空閑內(nèi)存總量
- buffers 用作內(nèi)核緩存的內(nèi)存量
對(duì)于進(jìn)程詳細(xì)的表頭重點(diǎn)關(guān)注:
PID、USER跃捣、PR漱牵、NI、VIRT疚漆、RES酣胀、SHR、S娶聘、%CPU闻镶、%MEM、TIME+丸升、COMMAND 列铆农。
具體含義不做說(shuō)明了。
另外常用的top命令選項(xiàng)如下:
top 每隔5秒顯式所有進(jìn)程的資源占用情況
top -d 2 每隔2秒顯式所有進(jìn)程的資源占用情況
top -c 每隔5秒顯式進(jìn)程的資源占用情況狡耻,并顯示進(jìn)程的命令行參數(shù)(默認(rèn)只有進(jìn)程名)
top -p <pid1> -p <pid2> 每隔5秒顯示pid是pid1和pid是pid2的兩個(gè)進(jìn)程的資源占用情況
top -d 2 -c -p <pid> 每隔2秒顯示pid是pid的進(jìn)程的資源使用情況墩剖,并顯式該進(jìn)程啟動(dòng)的命令行參數(shù)
free
查看內(nèi)存情況,將used的值減去buffer和cache的值就是你當(dāng)前真實(shí)內(nèi)存使用酝豪。
Mem:表示物理內(nèi)存統(tǒng)計(jì)
- total:表示物理內(nèi)存總量(total = used + free)
- used:表示總計(jì)分配給緩存(包含buffers 與cache )使用的數(shù)量胖缤,但其中可能部分緩存并未實(shí)際使用枝恋。
- free:未被分配的內(nèi)存。
- shared:共享內(nèi)存,一般系統(tǒng)不會(huì)用到帽氓。
- buffers:系統(tǒng)分配但未被使用的buffers 數(shù)量母赵。
- cached:系統(tǒng)分配但未被使用的cache 數(shù)量特恬。
-/+ buffers/cache:表示物理內(nèi)存的緩存統(tǒng)計(jì)
- used:也就是第一行中的used – buffers-cached 也是實(shí)際使用的內(nèi)存總量舆逃。
- Swap:表示硬盤上交換分區(qū)的使用情況,這里我們不做關(guān)注背捌。
但對(duì)于應(yīng)用程序來(lái)說(shuō)毙籽,buffers/cached 是等于可用的,因?yàn)閎uffer/cached是為了提高文件讀取的性能毡庆,當(dāng)應(yīng)用程序需在用到內(nèi)存的時(shí)候坑赡,buffer/cached會(huì)很快地被回收烙如。
所以從應(yīng)用程序的角度來(lái)說(shuō) 可用內(nèi)存=系統(tǒng)free memory+buffers+cached.
buffers是指用來(lái)給塊設(shè)備做的緩沖大小,只記錄文件系統(tǒng)的metadata以及 tracking in-flight pages.
cached是用來(lái)給文件做緩沖毅否。
使用free命令亚铁,能讓你清楚的了解當(dāng)前系統(tǒng)內(nèi)存消耗情況。
vmstat
vmstat命令是最常見(jiàn)的Linux/Unix監(jiān)控工具螟加,可以展現(xiàn)給定時(shí)間間隔的服務(wù)器的狀態(tài)值,包括服務(wù)器的CPU使用率徘溢,內(nèi)存使用,虛擬內(nèi)存交換情況,IO讀寫(xiě)情況捆探。
相比于top然爆、free等命令,vmstat可以看到整個(gè)機(jī)器的CPU,內(nèi)存,IO的消耗情況黍图。
一般情況下vmstat工具的使用是通過(guò)兩個(gè)數(shù)字參數(shù)來(lái)完成的曾雕,第一個(gè)參數(shù)是采樣的時(shí)間間隔數(shù),單位是秒助被,第二個(gè)參數(shù)是采樣的次數(shù)翻默,如下命令:
vmstat 2 1
2表示每個(gè)兩秒采集一次服務(wù)器狀態(tài),1表示只采集一次恰起。
==這個(gè)命令是做性能測(cè)試進(jìn)一步診斷分析必須掌握的的==
下面我們對(duì)其進(jìn)行更詳細(xì)的說(shuō)明:
procs
- r列 顯示運(yùn)行和等待CPU時(shí)間片的進(jìn)程數(shù),若其值長(zhǎng)時(shí)間大于系統(tǒng)CPU個(gè)數(shù)趾牧,就說(shuō)明CPU資源可能不足检盼,可以考慮增加CPU;
- b列 顯示在等待資源的進(jìn)程數(shù)翘单,比如正在等待I/O或者內(nèi)存交換等吨枉。
memory
- swpd列 顯示切換到內(nèi)存交換區(qū)的內(nèi)存數(shù)量(以KB為單位)。若swpd的值不為0或者比較大哄芜,同時(shí)si貌亭、so的值長(zhǎng)時(shí)間為0,那這種情況一般不用擔(dān)心认臊,不會(huì)影響系統(tǒng)性能
- free列 顯示當(dāng)前空閑的物理內(nèi)存數(shù)量(以KB為單位)
- buff列 顯示buffers cache的內(nèi)存數(shù)量圃庭,一般對(duì)塊設(shè)備的讀寫(xiě)才需要緩沖
- cache列 顯示page cached的內(nèi)存數(shù)量,一般作文件系統(tǒng)的cached失晴,頻繁訪問(wèn)的文件都會(huì)被cached剧腻。如果cached值較大,就說(shuō)明cached文件數(shù)較多涂屁。如果此時(shí)IO中的bi比較小书在,就說(shuō)明文件系統(tǒng)效率比較好
swap
- si列 顯示由磁盤調(diào)入內(nèi)存,也就是內(nèi)存進(jìn)入內(nèi)存交換區(qū)的數(shù)量
- so列 顯示由內(nèi)存調(diào)入磁盤拆又,也就是內(nèi)存交換區(qū)進(jìn)入內(nèi)存的數(shù)量
==一般情況下儒旬,si栏账、so的值都為0,如果si栈源、so的值長(zhǎng)時(shí)間不為0挡爵,則表示系統(tǒng)內(nèi)存不足,需要考慮是否增加系統(tǒng)內(nèi)存凉翻。==
IO
- bi列 顯示從塊設(shè)備讀入的數(shù)據(jù)總量(即讀磁盤了讨,單位KB/秒)
- bo列 顯示寫(xiě)入到塊設(shè)備的數(shù)據(jù)總量(即寫(xiě)磁盤,單位KB/秒)
==這里設(shè)置的bi+bo參考值為1000制轰,如果超過(guò)1000前计,而且wa值比較大,則表示系統(tǒng)磁盤IO性能瓶頸垃杖。==
system
- in列表示在某一時(shí)間間隔中觀察到的每秒設(shè)備中斷數(shù)
- cs列表示每秒產(chǎn)生的上下文切換次數(shù)
==上面這兩個(gè)值越大男杈,會(huì)看到內(nèi)核消耗的CPU時(shí)間就越多,這個(gè)時(shí)候可能要考慮下為何內(nèi)核的消耗會(huì)這么大调俘,有可能有瓶頸存在伶棒。==
CPU
- us列 顯示了用戶進(jìn)程消耗CPU的時(shí)間百分比。us的值比較高時(shí)彩库,說(shuō)明用戶進(jìn)程消耗的CPU時(shí)間多肤无,如果長(zhǎng)期大于50%,需要考慮優(yōu)化程序啥的骇钦。
- sy列顯示了內(nèi)核進(jìn)程消耗CPU的時(shí)間百分比宛渐。sy的值比較高時(shí),就說(shuō)明內(nèi)核消耗的CPU時(shí)間多眯搭;如果us+sy超過(guò)80%窥翩,就說(shuō)明CPU的資源存在不足。
- id列 顯示了CPU處在空閑狀態(tài)的時(shí)間百分比
- wa列 顯示IO等待所占的CPU時(shí)間百分比鳞仙。wa值越高寇蚊,說(shuō)明IO等待越嚴(yán)重。如果wa值超過(guò)20%棍好,說(shuō)明IO等待嚴(yán)重
- st列 虛擬機(jī)占用的時(shí)間百分比仗岸。
sar
sar(System Activity Reporter系統(tǒng)活動(dòng)情況報(bào)告)是目前 Linux 上最為全面的系統(tǒng)性能分析工具之一,可以從多方面對(duì)系統(tǒng)的活動(dòng)進(jìn)行報(bào)告梳玫,包括:文件的讀寫(xiě)情況爹梁、系統(tǒng)調(diào)用的使用情況、磁盤I/O提澎、CPU效率姚垃、內(nèi)存使用狀況、進(jìn)程活動(dòng)及IPC有關(guān)的活動(dòng)等盼忌。
如果你的系統(tǒng)沒(méi)安裝該命令积糯,請(qǐng)用以下方式進(jìn)行安裝
apt-get install sysstat
yum install sysstat
安裝完成后在用以下命令啟用:
vi /etc/default/sysstat
將ENABLED改為“true”
ENABLED="true"
重啟下sar服務(wù)掂墓,開(kāi)始采集相關(guān)數(shù)據(jù)
/etc/init.d/sysstat start
- 命令常用格式
sar [options] [-A] [-o file] t [n]
其中:
t為采樣間隔,n為采樣次數(shù)看成,默認(rèn)值是1君编;
-o file表示將命令結(jié)果以二進(jìn)制格式存放在文件中,file 是文件名川慌。
options 為命令行選項(xiàng)吃嘿,sar命令常用選項(xiàng)如下:
- sar參數(shù)說(shuō)明
-A 查看匯總所有的報(bào)告
-a 查看文件讀寫(xiě)使用情況
-B 查看附加的緩存的使用情況
-b 查看緩存的使用情況
-c 查看系統(tǒng)調(diào)用的使用情況
-d 查看磁盤的使用情況
-g 查看串口的使用情況
-h 查看關(guān)于buffer使用的統(tǒng)計(jì)數(shù)據(jù)
-m 查看IPC消息隊(duì)列和信號(hào)量的使用情況
-n 查看命名cache的使用情況
-p 查看調(diào)頁(yè)活動(dòng)的使用情況
-q 查看運(yùn)行隊(duì)列和交換隊(duì)列的平均長(zhǎng)度
-R 查看進(jìn)程的活動(dòng)情況
-r 查看沒(méi)有使用的內(nèi)存頁(yè)面和硬盤塊
-u 查看CPU的利用率
-v 查看進(jìn)程、文件和鎖表狀態(tài)
-w 查看系統(tǒng)交換活動(dòng)狀況
-y 查看TTY設(shè)備活動(dòng)狀況
- 查看CPU是否存在瓶頸:
sar -u
sar -q
- 查看內(nèi)存是否存在瓶頸:
sar -B
sar -r
sar -W
- 查看IO是否存在瓶頸
sar -b
sar -u
sar -d
- 示例
例如梦重,每10秒采樣一次兑燥,連續(xù)采樣3次,觀察CPU 的使用情況琴拧,并將采樣結(jié)果以二進(jìn)制形式存入當(dāng)前目錄下的文件cpu_info中降瞳,需鍵入如下命令:
sar -u -o cpu_info 10 3
iostat
iostat主要用于監(jiān)控系統(tǒng)設(shè)備的IO負(fù)載情況,iostat首次運(yùn)行時(shí)顯示自系統(tǒng)啟動(dòng)開(kāi)始的各項(xiàng)統(tǒng)計(jì)信息蚓胸,之后運(yùn)行iostat將顯示自上次運(yùn)行該命令以后的統(tǒng)計(jì)信息挣饥。用戶可以通過(guò)指定統(tǒng)計(jì)的次數(shù)和時(shí)間來(lái)獲得所需的統(tǒng)計(jì)信息。
iotop
如果你想知道每個(gè)進(jìn)程是如何使用IO的就比較麻煩沛膳。這個(gè)時(shí)候iotop可以上場(chǎng)了扔枫。
iotop 是一個(gè)用來(lái)監(jiān)視磁盤 I/O 使用狀況的 top 類工具。iotop 具有與 top 相似的 UI锹安,其中包括 PID茧吊、用戶、I/O八毯、進(jìn)程等相關(guān)信息。
其他命令
mpstat瞄桨、netstat话速、pidstat也是常用的,大家看相關(guān)手冊(cè)學(xué)習(xí)芯侥。這里不再進(jìn)行說(shuō)明
總結(jié)
linux的監(jiān)控篇就分享這些泊交,vmstat、sar必須掌握柱查,至于top廓俭、free等簡(jiǎn)單命令,是基本的了唉工,肯定是也要掌握的研乒。不管怎么樣,對(duì)于這些命令還是要多練習(xí)淋硝,多去把各個(gè)命令選項(xiàng)都用用雹熬,看看實(shí)際的輸出宽菜,對(duì)分析下各個(gè)指標(biāo)間的關(guān)系。