效能測試中伺服器關鍵效能指標淺析

icexu2發表於2020-06-24

在對網際網路服務進行服務端效能測試時,主要關注兩方面的效能指標:

業務指標:如吞吐量(QPS、TPS)、響應時間(RT)、併發數、業務成功率等

資源指標:如CPU、記憶體、Disk I/O、Network I/O等資源的消耗情況

本文主要介紹一些廣泛適用的、基本的資源指標以及這些指標在Linux伺服器的獲取方式。

關於CPU資源,有三個重要概念是我們需要關注的:使用率、執行佇列和上下文切換。

CPU使用率(CPU Utilization Percentages):有程式處於Running狀態的時間/總時間。

效能測試指標中,CPU使用率通常用us + sy來計算,其可接受上限通常在70%~80%。另外需要注意的是,在測試過程中,如果sy的值長期大於25%,應該關注in(系統中斷)和cs(上下文切換)的數值,並根據被測應用的實現邏輯來分析是否合理。

執行佇列程式數(Processes on run queue):Running狀態 + Waiting狀態的程式數,展示了正在執行和等待CPU資源的任務數,可以看作CPU的工作清單,是判斷CPU資源是否成為瓶頸的重要依據。vmstat透過r的值來體現:

r: 可執行程式數,包括正在執行(Running)和已就緒等待執行(Waiting)的。

如果r的值等於系統CPU總核數,則說明CPU已經滿負荷。在負載測試中,其可接受上限通常不超過CPU核數的2倍。

上下文切換(Context Switches):簡單來說,context指CPU暫存器和程式計數器在某時間點的內容,(程式)上下文切換即kernel掛起一個程式並將該程式此時的狀態儲存到記憶體,然後從記憶體中恢復下一個要執行的程式原來的狀態到暫存器,從其上次暫停的執行程式碼開始繼續執行至頻繁的上下文切換將導致sy值增長。vmstat透過cs的值來體現:

另外還有一個指標用來作為系統在一段時間內的負載情況的參考:

平均負載Load Average:在UNIX系統中,Load是對系統工作量的度量。Load取值有兩種情況,多數UNIX系統取執行佇列的值(vmstat輸出的r),而Linux系統取執行佇列的值 + 處於task_uninterruptible狀態的程式數(vmstat輸出的b),所以會出現CPU使用率不高但Load值很高的情況。Load Average就是在一段時間內的平均負載,系統工具top、uptime等提供1分鐘、5分鐘和15分鐘的平均負載值。

講到的記憶體,包括實體記憶體和虛擬記憶體,效能測試工具實體記憶體和硬碟上的一塊空間(SWAP)組合起來作為虛擬記憶體(Virtual Memory)為程式的執行提供一個連續的記憶體空間,這樣的好處是程式可用的記憶體變大了, 但需要注意的是,SWAP的讀寫速度遠低於實體記憶體,並且實體記憶體和swap之間的資料交換會增加系統負擔。虛擬記憶體被分成頁(x86系統預設頁大小為4k),核心讀寫虛擬記憶體以頁為單位,當實體記憶體空間不足時,記憶體排程會將實體記憶體上不常使用的記憶體頁資料儲存到磁碟的SWAP空間,實體記憶體與swap空間之間的資料交換過程稱為頁面交換(Paging)。

可用記憶體(free memory):記憶體佔用的直觀資料,vmstat輸出free的值,可用記憶體過小將影響整個系統的執行效率,對於穩定執行的系統,free可接受的範圍通常應該大於實體記憶體的20%,即記憶體佔用應該小於實體記憶體的80%。在壓力測試時,系統記憶體資源的情況應該用可用記憶體結合頁面交換情況來判斷,如果可以記憶體很少,但頁面交換也很少,此時可以認為記憶體資源還對系統效能構成嚴重影響。

頁面交換(Paging):頁面交換包括從SWAP交換到記憶體和從記憶體交換到SWAP,如果系統出現頻繁的頁面交換,需要引起注意。可以從vmstat的si和so獲取:

si:每秒從SWAP讀取到記憶體的資料大小

so:每秒從記憶體寫入到SWAP的資料大小

SWAP空間佔用:可以從vmstat的swpd來獲取當前SWAP空間的使用情況,應該和頁面交換結合來分析,比如當swpd不為0,但si,so持續保持為0時,記憶體資源並沒有成為系統的瓶頸。

磁碟通常是系統中最慢的一環,一是其自身速度慢,即使是SSD,其讀寫速度與記憶體都還存在數量級的差距,二是其離CPU最遠。另外需要說明的是磁碟IO分為隨機IO和順序IO兩種型別,在效能測試中應該先了解被測系統是偏向哪種型別。

隨機IO:隨機讀寫資料,讀寫請求多,每次讀寫的資料量較小,其IO速度更依賴於磁碟每秒能IO次數(IOPS)。

順序IO:順序請求大量資料,讀寫請求個數相對較少,每次讀寫的資料量較大,順序IO更重視每次IO的資料吞吐量。

對於磁碟,首要關注使用率,IOPS和資料吞吐量,在Linux服務區,可以使用iostat來獲取這些資料。

(裝置)使用率:統計過程中處理I/O請求的時間與統計時間的百分比,即iostat輸出中的%util,如果該值大於60%,很可能降低系統的效能表現。

IOPS:每秒處理讀/寫請求的數量,即iostat輸出中的r/s和w/s,個人PC的機械硬碟IOPS一般在100左右,而各種公有云/私有云的普通伺服器,也只在百這個數量級。預先獲取到所用服務區的IOPS能力,然後在效能測試中監控試試的IOPS資料,來衡量當前的磁碟是否能滿足系統的IO需求。

資料吞吐量:每秒讀/寫的資料大小,即iostat輸出中的rkB/s和wkB/s,通常磁碟的資料吞吐量與IO型別有直接關係,順序IO的吞吐能力明顯優與隨機讀寫,可以預先測得磁碟在隨機IO和順序IO下的吞吐量,以便於測試時監控到的資料進行比較衡量。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29297389/viewspace-2700544/,如需轉載,請註明出處,否則將追究法律責任。

相關文章