概述
我們知道,影響一個B/S應用性能的因素,粗略地說,有以下幾個大的環節:
1. 客戶端環節
2. 網絡環節(可能包括WAN和LAN)
3. 應用及中間層環節
4. 數據庫層環節
能夠對各個環節的問題進行“貫穿“的診斷,才能算是”端到端“的診斷。
能夠進行這種類型的診斷的工具很多,我們后面會分別介紹,今天只是給大家看看利用Oracle的工具軟件進行從最前端到最后端的應用性能診斷的例子。
涉及的Oracle軟件產品有以下幾個:
- RUEI(真是的客戶體驗洞察)
- EM12c 基礎框架
- weblogic監控模塊
- JVMD(java虛擬機診斷)
- Oracle數據庫監控相關模塊
上面列出的產品其實都是Oracle Enterprise Manager產品的組件,我們先簡單介紹一下不是那么普及的軟件:
RUEI介紹
RUEI(Real User Experience Insight)是從客戶體驗角度,量化地衡量一個應用的性能工具。利用傳統方式,我們只能從后端,從資源消耗的角度;或者,從前端,從用戶的感性評價角度去衡量一個應用的性能。比如,我們可以從后端看主機的CPU消耗,看數據庫的等待事件等等,或者利用調查問卷,調查用戶的實際使用感想,但是往往得到的都是,諸如“太慢“,”容易死機“,等等非常感性的評價,最終用戶從來不會准確地告訴你量化的評價,比如:頁面到底花多長時間才載入完成?
而RUEI可以告訴這些信息,RUEI利用網絡嗅探技術,抓取B/S應用客戶端和服務器端之間的數據包,分析其中的時間戳,通過相應的算法,得到應用用戶訪問應用的量化的性能數據。
RUEI的基本原理圖是這樣的:
JVMD介紹
JVMD最早叫AD4J,Application Diagnostic for Java,是單獨的產品,后來慢慢被Oracle整合進EM12c,它是安裝在J2EE應用服務器上的診斷工具,利用采樣算法(Oracle宣稱不是BCI方式--字節碼注入方式),分析得到應用模塊的性能信息。JVMD可以進行live thread分析,同時可以還原 應用的SQL調用,對從中間層跨越到數據庫層進行診斷幫助很大。
因為涉及的產品很多,如果講具體的配置方法,文章會很長,所以今天只看案例,具體的方法,如果大家有興趣,后續可以在其他文中繼續介紹,也可以參考海天幾位專家編寫的《Oracle雲管理平台:企業管理器12c實戰指南》,書里有詳細的配置方法。(也算小小做個廣告,哈哈)
案例
某省機關新上應用,存在一些性能問題,希望我們幫忙進行診斷和優化。客戶的應用是B/S架構,結構相對簡單,客戶端訪問apache http server,由apache負責處理靜態頁面,動態頁面轉發給后端的weblogic服務器集群,后台數據庫是Oracle。
在部署了RUEI和EM12c(weblogic監控,JVMD,Oracle數據庫監控),以后,利用工具進行診斷:
(為了便於大家理解,每個環節我都只用盡量少的信息來說明問題,實際情況可能復雜得多。)
首先利用RUEI看總體情況:
綠色代表客戶滿意的訪問量(2秒內頁面返回),黃色代表正常的訪問量(2~4秒頁面返回),紅色代表用戶“憤怒“的訪問量,4秒以上返回。(頁面滿意度的時間可以由客戶自己設置)
總體來看,情況似乎可接受。
再看從RUEI角度看,客戶端,網絡,服務器三個環節的性能信息:
除了個別的頁面會有瀏覽器忙時間(比如瀏覽器執行JS這樣的動作耗時)有非常少量的耗時之外,大量的頁面瀏覽器耗時非常少,少到軟件認為可以忽略的程度(顯示為0毫秒)
從這張圖上還可以區分出是網絡慢(每次點擊傳輸時間),還是服務器慢(每次點擊的服務器時間)。
顯然,服務器時間是占“大頭“的。
下面再進一步分析,到底是哪些頁面請求消耗服務器時間較長:
找到耗時長的頁面,如果在http端或weblogic端啟用了ECID(運行上下文ID),我們就可以直接從RUEI里面下鑽到JVMD,進行下一步的診斷。我們這個案例里面,客戶沒有啟用ECID,所以我們只能進行手動的“下鑽“。
從RUEI中得到的最耗時的頁面: XXXXXFrame.do,在JVMD中用此request,最為條件,作為JVM Thread 信息的過濾條件:
得到執行或這個request的thread的具體信息:
點擊上圖中綠色顯示的等待,得到單一thread具體的分析信息,其中會有thread等待的SQL的信息:
在進一步點擊SQL ID,就進入到數據庫的SQL信息頁面:
其實一旦找到SQL語句,對於DBA來講,問題就簡單了。篇幅有限,就不再貼圖了。
這個案例重要的不是結果,而是過程,如果我們沒有這樣的工具,我們可能會面臨幾個問題:
- 無量化的客戶體驗診斷
- 無法區分各環節具體耗時(客戶端、網絡、服務器)
- 在服務器端的診斷效率很差
- 需要人工進行頁面請求和SQL的關聯,效率很低,甚至有時,沒有開發商的幫助,是不可能完成的任務
現在,利用Oracle的這些工具,可以大幅提高診斷的准確率和效率,同時還能給客戶看到量化的客戶體驗數據。








