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