效能測試相關(TPS/RT/PV等)
對於我們開發來說,我們日常最熟悉的工作就是把客戶的需求實現並交付。但是,事情並不是往往就這樣結束了,我們還需要後續對上線的系統進行跟蹤調查,檢視系統的執行情況。為什麼呢?一方面,我們需要關注系統在執行過程中的健康問題,是否有異常等等;另一方面我們需要了解系統性能和容量是否能滿足使用者的日常訪問。只有去了解線上系統的執行狀況,才能讓為後續專案提供參考,及早的調節以避免故障問題。
對於應用系統在線上出現的異常,我們可以通過監控系統的日誌掃描或者一些監控api來進行異常監控。比如可以通過應用的監控系統來檢視。對於效能方面,我們有哪些效能指標去關注呢,下面列出了幾個在監控系統中最常用的效能指標。
PV
PV是 Page View的縮寫。使用者通過瀏覽器訪問頁面,對應用伺服器產生的每一次請求,
記為一個 PV。淘寶效能測試環境下,將這個概念做了延伸,系統真實處理的一個請求,視
為一個 PV。即,PV的概念也適用於介面。
PV的統計一般可以通過監控埋點或者統計訪問日誌統計得出。
說到PV還有個特殊的情況,叫PeakPV,指一天中 PV數達到的高峰PV值。
通過一些監控系統,也可以直觀看到統計資料。
QPS/TPS
QPS/TPS原本含義為:系統每秒能處理的請求/事務的數量,或者說吞吐量。在web應用我們更關注的是web應用每秒能處理的request數量。這個是衡量系統性能的重要指標。
QPS(TPS)= 併發數/平均響應時間。
QPS的統計可以通過訪問日誌統計對應時間的PV量除以對應時間求得。在效能測試中可以通過工具測試獲得。
一般經常統計的是高峰期PV對應的QPS。
ResponseTime響應時間
響應時間(RT)是指從客戶端發一個請求開始計時,到客戶端接收到從伺服器端返回的響應結果結束所經歷的時間,響應時間由請求傳送時間、網路傳輸時間和伺服器處理時間三部分組成。
LOAD負載
系統平均負載,被定義為在特定時間間隔內執行佇列中的平均程序數。如果一個程序滿
足以下條件則其就會位於執行佇列中:
-它沒有在等待 I/O操作的結果
-它沒有主動進入等待狀態(也就是沒有呼叫'wait')
-沒有被停止(例如:等待終止)1
這個負載值比較理想的指標值是cpu個數*核數*0.7 ,如果超過長期超過過這個值就需要對系統進行警惕了。
CPU 資源
CPU 資源這裡指應用服務系統的 CPU 資源佔用率。CPU 資源是判斷系統處理能力以及應用執行是否穩定的重要引數。
JVM GC和FullGC
對於java應用的效能指標必定少不了GC的相關指標了。通常我們的應用應該儘量避免FGC。因為FGC會進行完全的垃圾清理,會使應用執行得很慢,所以需要通過設定合適的JVM引數和GC策略來避免FGC。通常監控的指標有GC次數和響應時間。
常用的效能指標還有記憶體佔用,磁碟io等一些指標,這裡就不一一列出。
上面介紹了一些效能指標的概念和統計方法,下面就講其中幾個之間的一些重要聯絡和區別。
1. 容量預測
對於我們設計的系統,我們在上線前肯定需要測試下能接收使用者多大的訪問量。即希望評估出最大的日PV到來的時候,我們的系統是否能支撐。但怎麼去評估呢,難道要造一個最大日pv的情景來測試?其實根據已有的經驗和資料,可以總結出了高峰QPS和日pv的關係。
我們通過每日的QPS和PV統計圖表可以發現,每日的曲線基本都是一致的。通過數學建模,我們可以發現高峰每臺伺服器QPS=( (總 PV*80%)/(24*60*60*40%))/伺服器數量1。其中80%和40%這2個數字是個不固定的引數,這個公式代表的意思是,在40%的時間(12小時)內產生80%總pv的QPS均值。對於不同的情景有不同的引數。
這樣我們就可以通過壓測應用獲取其高峰QPS,然後根據公式算出指定高峰QPS下的日PV,通過這樣來進行容量預測。
即:日預估PV=壓測QPS * (24*60*60*時間百分比)/0.8 * 機器數量
2. CPU 資源佔用率 與 LOAD
按很多人的印象cpu佔用率和load都是對當前cpu使用率的統計。但是實際上這2個指標還是有很大區別的。
cpu佔用率很好理解,就是對cpu使用所佔時間比率。而cpu load則是基於一段時間內等待cpu處理的任務佇列的平均長度。這個指標在高負載的情況下比cpu佔用率具有更高的參考價值。因為在高負荷時段,cpu的佔用率基本都接近100%,它無法反映機器負荷的程度。相反,通過統計任務佇列的長度可以反映出系統目前負荷是否嚴重,是否可控。
用下圖中公路與車輛的關係可以很好理解load的概念:
(系統是單處理器時)
當load等於1的時候,系統滿負荷,但是能滿足當前的系統需求;
當load小於1的時候,系統輕鬆執行;
當load大於1時候,有很多車輛等待進入公路,就如任務在等待cpu處理一樣,這時候cpu佔用率根本無法分辨出load=1和load>1這2種情況。
所以讀懂load對於理解系統當前執行負荷是很有幫助的。
效能指標還是有很多資訊可以去挖的,本文從應用監控的角度出發進行了一個簡單介紹。但是不可否認,讀懂效能指標是每個應用負責人去了解系統執行狀況的必要條件,也是每個開發應當關心的內容。
參考資料:
淘寶效能測試白皮書
https://my.oschina.net/tantexian/blog/684239