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