性能測(cè)試指標(biāo)是衡量系統(tǒng)性能的評(píng)價(jià)標(biāo)準(zhǔn),常用的系統(tǒng)性能測(cè)試指標(biāo)包括:響應(yīng)時(shí)間、并發(fā)用戶/并發(fā)、點(diǎn)擊率、吞吐量、TPS/QPS、PV/UV;Linux服務(wù)器常用的性能指標(biāo)包括:CPU使用率、內(nèi)存占用率、磁盤IO、系統(tǒng)平均負(fù)載等。
一 系統(tǒng)性能測(cè)試指標(biāo)
1.1 響應(yīng)時(shí)間
響應(yīng)時(shí)間是指某個(gè)請(qǐng)求或操作從發(fā)出到接收到反饋所消耗的時(shí)間,包括應(yīng)用服務(wù)器(客戶端)處理時(shí)間、網(wǎng)絡(luò)傳輸時(shí)間以及數(shù)據(jù)庫服務(wù)器處理時(shí)間。比如一個(gè)頁面從點(diǎn)擊/輸入到完全加載的時(shí)間;完成一次增加、刪除、修改或者查詢動(dòng)作的事務(wù)響應(yīng)時(shí)間等。
一個(gè)請(qǐng)求在網(wǎng)絡(luò)上的傳輸往往要經(jīng)歷多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)才能到達(dá)目標(biāo)服務(wù)器,我們假設(shè)請(qǐng)求經(jīng)歷了三個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)的傳輸時(shí)間B1、B2、B3,客戶端的處理時(shí)間為A,服務(wù)器的響應(yīng)時(shí)間為C。則一次請(qǐng)求的完整路徑可以描述為下圖:
客戶端從發(fā)出請(qǐng)求到接收到服務(wù)器反饋的完整鏈路時(shí)間為A—>B1—>B2—>B3—>C(節(jié)點(diǎn)處理時(shí)間都包括接收和發(fā)送兩個(gè)過程)。則請(qǐng)求的響應(yīng)時(shí)間為:
響應(yīng)時(shí)間=A+B1+B2+B3+C
1.2 并發(fā)
并發(fā)是指多個(gè)用戶在同一時(shí)期內(nèi)進(jìn)行相同的事務(wù)處理或操作。由于用戶在進(jìn)行一系列操作流程時(shí)有一定的時(shí)間間隔(即用戶思考時(shí)間)或者服務(wù)器處理請(qǐng)求有先后順序,于是,就產(chǎn)生了絕對(duì)并發(fā)和相對(duì)并發(fā)概念的區(qū)分。
絕對(duì)并發(fā)是指同一時(shí)刻(即同一時(shí)間點(diǎn))并發(fā)用戶對(duì)服務(wù)器同時(shí)發(fā)送請(qǐng)求。
相對(duì)并發(fā)是指一段時(shí)間內(nèi)(即同一時(shí)間區(qū)間)并發(fā)用戶對(duì)服務(wù)器發(fā)送請(qǐng)求。
舉個(gè)例子,一個(gè)并發(fā)量為10000人(可同時(shí)容納10000人)的動(dòng)物園,這里的并發(fā)量是指絕對(duì)并發(fā)還是相對(duì)并發(fā)呢?我們很容易理解,這個(gè)并發(fā)指的是相對(duì)并發(fā),因?yàn)檎麄€(gè)動(dòng)物園是一個(gè)交織的網(wǎng)狀結(jié)構(gòu),出入口、老虎、獅子、大象等各個(gè)動(dòng)物站點(diǎn)都有分流的作用,基本不可能出現(xiàn)出入口或者站點(diǎn)能夠同時(shí)承載10000人的情況,出入口的并發(fā)可能只有200人。
因此這個(gè)動(dòng)物園的例子里,并發(fā)量10000是指各個(gè)節(jié)點(diǎn)的總和,參觀者參觀動(dòng)物園有路徑的先后順序,是相對(duì)并發(fā)的概念。而出入口的并發(fā)量是200人,則是指同一時(shí)間在出入口能夠同時(shí)容納200人,這就是絕對(duì)并發(fā)的概念。
一般來說,在系統(tǒng)的性能測(cè)試中,系統(tǒng)或者模塊的并發(fā)更多是指相對(duì)并發(fā),而接口的并發(fā)更傾向于絕對(duì)并發(fā)。并發(fā)性能的概念是指系統(tǒng)、模塊或接口穩(wěn)定運(yùn)行,不拋出異常情況下所能夠承載的并發(fā)量。
在并發(fā)性能測(cè)試中常用到并發(fā)用戶數(shù)和并發(fā)請(qǐng)求數(shù)兩個(gè)指標(biāo)。顧名思義,并發(fā)用戶數(shù)是指同一時(shí)間(點(diǎn)或區(qū)間),系統(tǒng)、模塊或接口能夠承載的用戶數(shù)量;并發(fā)請(qǐng)求數(shù)是指同一時(shí)間(點(diǎn)或區(qū)間),系統(tǒng)、模塊或接口能夠承載的請(qǐng)求數(shù)量。
1.3 點(diǎn)擊量/點(diǎn)擊率
點(diǎn)擊量是衡量網(wǎng)站流量的一個(gè)指標(biāo),也就是點(diǎn)擊數(shù)clicks,是對(duì)網(wǎng)站點(diǎn)擊數(shù)據(jù)的統(tǒng)計(jì)。
點(diǎn)擊率(Clicks Ratio)也可以叫做點(diǎn)進(jìn)率(“Click-through Rate),它是網(wǎng)站上某一內(nèi)容被點(diǎn)擊的次數(shù)與整個(gè)網(wǎng)站內(nèi)容被顯示次數(shù)之比,即clicks/views。反應(yīng)了網(wǎng)站上某一頁面或內(nèi)容的受關(guān)注程度,經(jīng)常用來衡量廣告的吸引程度。比如公眾號(hào)的一篇文章被瀏覽了10w次,文章中的廣告鏈接被點(diǎn)擊了2000次,那么這條廣告的點(diǎn)擊率是2%(2000/100000*100%)。
在性能測(cè)試領(lǐng)域,點(diǎn)擊率(hit rate)常指單位時(shí)間內(nèi)(每秒鐘)頁面的點(diǎn)擊數(shù),即每秒鐘發(fā)送的http請(qǐng)求數(shù)量,點(diǎn)擊率越大對(duì)服務(wù)器造成的壓力也越大,對(duì)服務(wù)器的性能要求也越高。
有些人容易混淆點(diǎn)擊率和點(diǎn)擊量的概念,比如我們經(jīng)常會(huì)聽到有人說某網(wǎng)站的點(diǎn)擊率是多多萬,實(shí)際上這里的點(diǎn)擊率指的是點(diǎn)擊量,曝光率或者說頁面瀏覽量。
1.4 吞吐量/吞吐率
吞吐量是指系統(tǒng)處理客戶請(qǐng)求數(shù)量的總和,可以指網(wǎng)絡(luò)上傳輸數(shù)據(jù)包的總和,也可以指業(yè)務(wù)中客戶端與服務(wù)器交互數(shù)據(jù)量的總和。
吞吐率是指單位時(shí)間內(nèi)系統(tǒng)處理客戶請(qǐng)求的數(shù)量,也就是單位時(shí)間內(nèi)的吞吐量??梢詮亩鄠€(gè)維度衡量吞吐率:
業(yè)務(wù)角度:?jiǎn)挝粫r(shí)間(每秒)的請(qǐng)求數(shù)或頁面數(shù),即請(qǐng)求數(shù)/秒或頁面數(shù)/秒;
網(wǎng)絡(luò)角度:?jiǎn)挝粫r(shí)間(每秒)網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包大小,即字節(jié)數(shù)/秒等;
系統(tǒng)角度,單位時(shí)間內(nèi)服務(wù)器所承受的壓力,即系統(tǒng)的負(fù)載能力。
吞吐率(或吞吐量)是一種多維度量的性能指標(biāo),它與請(qǐng)求處理所消耗的CPU、內(nèi)存、IO和網(wǎng)絡(luò)帶寬都強(qiáng)相關(guān)。
1.5 TPS/QPS
TPS(Transaction Per Second)是指單位時(shí)間(每秒)系統(tǒng)處理的事務(wù)量。事務(wù)可以是用戶自定義的一系列操作或者動(dòng)作的集合,比如“用戶注冊(cè)“事務(wù)是點(diǎn)擊注冊(cè)按鈕,填寫用戶注冊(cè)信息,點(diǎn)擊提交按鈕,以及加載注冊(cè)成功頁面的動(dòng)作集合。
QPS(Query Per Second)是指單位時(shí)間內(nèi)查詢或訪問服務(wù)器的次數(shù)。
TPS和QPS的區(qū)別在于一個(gè)事務(wù)可以包含多次查詢或訪問服務(wù)器,也可以只查詢或訪問一次服務(wù)器。當(dāng)多次查詢或訪問時(shí),一個(gè)TPS相當(dāng)于多個(gè)QPS;當(dāng)只查詢或訪問一次時(shí),一個(gè)TPS則等價(jià)于一個(gè)QPS。
1.6 PV/UV
PV和UV是衡量web網(wǎng)站性能容量的兩個(gè)重要度量指標(biāo),經(jīng)常用在電子商務(wù)網(wǎng)站領(lǐng)域中用來衡量網(wǎng)站的活躍度。
PV(Page View)是頁面的瀏覽量或點(diǎn)擊量,用戶對(duì)系統(tǒng)或者網(wǎng)站任何頁面的每一次點(diǎn)擊或者訪問都會(huì)被記錄一次瀏覽量或點(diǎn)擊量,對(duì)相同頁面進(jìn)行多次訪問瀏覽量或點(diǎn)擊量也會(huì)進(jìn)行累計(jì)。
UV(Unique Vistor)是系統(tǒng)或者網(wǎng)站的獨(dú)立訪客,一段時(shí)間內(nèi)相同客戶端(或PC)訪問系統(tǒng)或者網(wǎng)站只會(huì)被記錄一次,連續(xù)重復(fù)訪問或者瀏覽多個(gè)系統(tǒng)頁面次數(shù)不會(huì)進(jìn)行累計(jì)。
PV和UV按照統(tǒng)計(jì)周期劃分,可以劃分為全天PV、每小時(shí)PV、全天UV和每小時(shí)UV等。在一些數(shù)據(jù)或交易量非常龐大的場(chǎng)景中,比如雙11或618等全民購物活動(dòng)時(shí),常常還會(huì)統(tǒng)計(jì)峰值PV和峰值UV。
二 Linux服務(wù)器性能指標(biāo)
2.1 CPU使用率
CPU使用率是單位時(shí)間內(nèi)服務(wù)器CPU的使用統(tǒng)計(jì),可以用除CPU空閑時(shí)間外其他時(shí)間占總CPU時(shí)間的百分比來表示,即:CPU使用率=1-CPU空閑時(shí)間/總CPU時(shí)間
命令:#top //top工具間隔3s會(huì)動(dòng)態(tài)滾動(dòng)更新一次數(shù)據(jù)
字段說明:
us (user):用戶態(tài)的CPU使用時(shí)間比例,是用戶運(yùn)行程序的真正時(shí)間,它不包括后面的ni時(shí)間;
sy (system): 內(nèi)核態(tài)的CPU使用時(shí)間比例,是操作系統(tǒng)的運(yùn)行時(shí)間,操作系統(tǒng)運(yùn)行時(shí),用戶運(yùn)行程序往往處于等待狀態(tài);
ni (nice): 表示低優(yōu)先級(jí)用戶態(tài)的CPU時(shí)間比例,取值范圍為[-20,19],數(shù)值越大,則優(yōu)先級(jí)越低;
id (idle): 表示空閑的CPU時(shí)間比例,值越大,CPU空閑時(shí)間比例越高,利用率越低;
wa (iowait): 表示處于IO等待狀態(tài)的CPU時(shí)間比例;
hi (hard interrupt): 表示處理硬中斷的CPU時(shí)間比例;
si (soft interrupt): 與hi相反,表示處理軟中斷的CPU時(shí)間比例;
st (steal): 表示當(dāng)前系統(tǒng)運(yùn)行在虛擬機(jī)中被其他虛擬機(jī)占用的CPU時(shí)間比例。
在性能測(cè)試中,系統(tǒng)整體的CPU使用率可以用(1-id)來計(jì)算。當(dāng)us很高時(shí),說明CPU時(shí)間主要消耗在用戶代碼上,可以從用戶代碼角度考慮優(yōu)化性能;當(dāng)sy很高時(shí),說明CPU時(shí)間主要消耗在內(nèi)核上,可以從是否系統(tǒng)調(diào)用頻繁、CPU進(jìn)程或線程切換頻繁角度考慮性能的優(yōu)化;當(dāng)wa很高時(shí),說明有進(jìn)程在進(jìn)行頻繁的IO操作,可能是磁盤IO或者網(wǎng)絡(luò)IO。
一般情況下,如果%us+%sy<=70%,我們可以認(rèn)為系統(tǒng)的運(yùn)行狀態(tài)良好。
2.2 內(nèi)存占用率
Linux的系統(tǒng)內(nèi)存管理機(jī)制遵循內(nèi)存利用率最大化的原則。內(nèi)核會(huì)將空余的內(nèi)存劃分為cached(不屬于free),對(duì)于有頻繁讀取操作的文件或數(shù)據(jù)會(huì)被保存在cached中。因此,對(duì)于linux系統(tǒng)來說,可用于分配的內(nèi)存不止free的內(nèi)存,同時(shí)還包括cached的內(nèi)存(其實(shí)還包括buffers的內(nèi)存)。
cached和buffers都屬于緩存,它們的區(qū)別主要在于cached主要用來緩沖頻繁讀取的文件,它可以直接記憶我們打開的文件內(nèi)容;而buffers主要用來給塊設(shè)備做的緩沖大小,只記錄文件系統(tǒng)的metadata以及tracking in-flight pages信息,比如存儲(chǔ)目錄里面的內(nèi)容,權(quán)限等。
top工具既可以查看系統(tǒng)CPU使用情況,也可以查看系統(tǒng)內(nèi)存使用信息。
命令:#top
在性能測(cè)試中,經(jīng)常會(huì)用到系統(tǒng)已用內(nèi)存、物理已用內(nèi)存、系統(tǒng)內(nèi)存占用率以及物理內(nèi)存占用率這幾個(gè)指標(biāo),它們的計(jì)算公式如下:
系統(tǒng)已用內(nèi)存MemUsed=MemTotal-MemFree //包含buffers和cached
物理已用內(nèi)存-/+Used= MemTotal-MemFree-MemBuffers-MemCached
系統(tǒng)內(nèi)存占用率MemUsed%=(MemUsed/ MemTotal)*100%
物理內(nèi)存占用率-/+Used%=(-/+Used/ MemTotal)*100%
一般情況下,系統(tǒng)內(nèi)存占用率<=70%,我們可以認(rèn)為系統(tǒng)的內(nèi)存使用情況良好,如果超出則說明系統(tǒng)內(nèi)存資源緊張。
2.3 系統(tǒng)平均負(fù)載
當(dāng)發(fā)現(xiàn)系統(tǒng)出現(xiàn)卡斷或者運(yùn)行不順暢時(shí),我們可以通過uptime,top或者w命令來查看系統(tǒng)的負(fù)載情況。
命令1:#uptime
命令2:#top
命令3:#w
Linux的load average表示系統(tǒng)負(fù)載的平均值,顯示的三個(gè)數(shù)值分別表示1分鐘、5分鐘和15分鐘內(nèi)的平均負(fù)載情況。這里的平均負(fù)載是指單位時(shí)間內(nèi),系統(tǒng)處于可運(yùn)行狀態(tài)和不可中斷狀態(tài)的平均進(jìn)程數(shù),可以簡(jiǎn)單的理解為平均負(fù)載就是系統(tǒng)平均活躍進(jìn)程數(shù)。
其中可運(yùn)行狀態(tài)是指正在使用CPU或者正在等待CPU的進(jìn)程(處于R狀態(tài):Running或者Runnable的進(jìn)程);不可中斷狀態(tài)的進(jìn)程指的是正處于內(nèi)核態(tài)關(guān)鍵流程中的進(jìn)程,處于這個(gè)流程的進(jìn)程是不可打斷的,比如等待硬件設(shè)備的I/O響應(yīng)。
舉個(gè)例子,當(dāng)平均負(fù)載的值為4:
對(duì)于只有1個(gè)CPU的系統(tǒng),意味著平均有3個(gè)進(jìn)程競(jìng)爭(zhēng)不到CPU;
對(duì)于擁有4個(gè)CPU的系統(tǒng),意味著CPU利用率為100%;
對(duì)于擁有8個(gè)CPU的系統(tǒng),意味著CPU利用率為50%,有一半空閑。
可以看出,當(dāng)系統(tǒng)平均負(fù)載的值如果超過系統(tǒng)CPU的數(shù)量時(shí),那么系統(tǒng)有可能會(huì)遇到性能瓶頸,要視具體情況而定。
在性能測(cè)試中,我們也經(jīng)常會(huì)通過比較1min、5min或者15min的值,來判斷系統(tǒng)平均負(fù)載的變化情況:
如果1min的值大于5min或者15min的值,說明負(fù)載在增加;
如果1min的值小于5min或者15min的值,說明負(fù)載在減??;
2.4 磁盤IO
Linux服務(wù)器性能除了CPU和內(nèi)存外,還有磁盤IO也是一種常用的性能指標(biāo)。
命令:#iostat –x –k 2 3 //每隔2S輸出磁盤IO的使用情況,共采樣3次
通過ll /dev/mapper命令可以查看dm-x與磁盤邏輯卷的映射關(guān)系;
字段說明:
rrqm/s: 每秒對(duì)該設(shè)備的讀請(qǐng)求被合并次數(shù),文件系統(tǒng)會(huì)對(duì)讀取同塊(block)的請(qǐng)求進(jìn)行合并;
wrqm/s: 每秒對(duì)該設(shè)備的寫請(qǐng)求被合并次數(shù);
r/s: 每秒完成的讀次數(shù);
w/s: 每秒完成的寫次數(shù);
rkB/s: 每秒讀數(shù)據(jù)量(kB為單位);
wkB/s: 每秒寫數(shù)據(jù)量(kB為單位);
avgrq-sz:平均每次IO操作的數(shù)據(jù)量(扇區(qū)數(shù)為單位);
avgqu-sz: 平均等待處理的IO請(qǐng)求隊(duì)列長度;
await: 平均每次IO請(qǐng)求等待時(shí)間(包括等待時(shí)間和處理時(shí)間,毫秒為單位);
svctm: 平均每次IO請(qǐng)求的處理時(shí)間(毫秒為單位);
%util: 采用周期內(nèi)用于IO操作的時(shí)間比率,即IO隊(duì)列非空的時(shí)間比率;
在性能測(cè)試中,我們可以重點(diǎn)關(guān)注iowait%和%util參數(shù)。其中iowait% 表示CPU等待IO時(shí)間占整個(gè)CPU周期的百分比,如果iowait值超過50%,或者明顯大于%system、%user以及%idle,表示IO可能存在問題了;%util表示磁盤忙碌的情況,一般%util<=70%表示該磁盤IO使用狀態(tài)良好。
審核編輯:湯梓紅
評(píng)論