對於咱們開發來講,咱們平常最熟悉的工做就是把客戶的需求實現並交付。可是,事情並非每每就這樣結束了,咱們還須要後續對上線的系統進行跟蹤調查,查看系統的運行狀況。爲何呢?一方面,咱們須要關注系統在運行過程當中的健康問題,是否有異常等等;另外一方面咱們須要瞭解系統性能和容量是否能知足用戶的平常訪問。只有去了解線上系統的運行情況,才能讓爲後續項目提供參考,及早的調節以免故障問題。
對於應用系統在線上出現的異常,咱們能夠經過監控系統的日誌掃描或者一些監控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對於理解系統當前運行負荷是頗有幫助的。
java
性能指標仍是有不少信息能夠去挖的,本文從應用監控的角度出發進行了一個簡單介紹。可是不能否認,讀懂性能指標是每一個應用負責人去了解系統運行情況的必要條件,也是每一個開發應當關心的內容。web
參考資料:api
淘寶性能測試白皮書瀏覽器
系統吞吐量評估方法http://blog.csdn.net/fenglibing/article/details/6223197服務器
理解 LINUX 的處理器負載均值http://www.gracecode.com/archives/2973/網絡