去年的年末寫了篇關于如何簡單使用JPROBE發現和定位J2EE應用中的性能瓶頸,JPROBE是QUEST公司的一個針對開發過程中應用程序的性能優化工具,但這不能滿足上面提出的對于系統全面的性能監控和管理要求。針對這種要求,結合目前市場上的性能分析,調優和管理工具,比如IBM Tivoli、HP Openview等,這類工具的主要功能是對整個系統進行管理;另外一些,比如Wily,Veritas i3等,這類工具也具備一定的管理和對整個系統進行監控的能力,同時對某一技術層次擁有非常出色的調優和監控能力;其他的工具如Quest JProbe就如上面介紹的一樣主要是針對開發過程中程序級別的性能優化。
本文將結合WILY和WEBLOGIC,以目前流行的應用架構來描述如何使用WILY這個工具對分布式系統進行全方位的性能監控和管理。以往針對J2EE的調優很多都是依靠開發人員或者是廠商技術人員根據經驗來對問題進行定位和調優,不能做到對系統全方位的了解。借助于WILY之后,可以從客戶體驗出發到具體的一個SQL語句進行深入細致的分析,來完成對系統的性能的監控和管理。
Wily公司成立于1998年,其第一個投資方是BEA,對WEBLOGIC有很好的支持。
Wily的核心產品是InterScope,包括IntroScopeEnterprise Manager, IntroScope Agent, IntroScopeWorkStation.通過IntroScope可以明確的顯示出在J2EE應用程序的什么為止出現了什么問題,比如在應用性能下降時,查明J2EE應用系統的什么位置導致問題是一個非常麻煩的工作,借助IntroScope將會變的非常簡單。
Wily Introscope的系統架構如下圖
Wily IntroScope特點
- 應用程序監控,低系統開銷,全面監控系統性能,專有的Blame技術即時精確地辨別引起性能問題的構件;
- 應用服務器監控,最廣泛的應用服務器支持,AutoProbe技術整合應用服務器自動獲取服務器信息;多平臺的支持;
- 對非JAVA系統的監控,通過EPA與Data API模塊,100%線程安全;
- 系統管理流程整合,通過MIB與系統管理框架整合,控制臺能與HP OpenView,Tivoli等整合,SmartTrigger報警系統與電子郵件,程序等整合;
- Wily特有的SmartStor技術可以方便快速的存儲監控數據信息,并能根據數據信息完成系統歷史數據分析和趨勢分析;
- 部分專有技術成為業界的標準。
通過IntroScope的結構圖可以看到,核心部分為IntroScope的Enterprise Manager,通過部署在應用中的各種不同AGENT來收集系統運行中的各項性能指標數據,匯總到EM進行分析,并能利用對歷史數據的分析對系統未來的性能表現進行評估;分析的結構可以具體的定位到什么位置除了什么問題,并將問題進行分類反饋到相應的系統維護人員,比如網絡,系統硬件維護人員,或者是開發和測試人員,對出現的問題進行調整。
Wily與Weblogic的集成
Wily有專門針對Weblogic的性能監控模板,為PowerPack,有效監控最為關鍵的WEBLOGIC資源,包括線程池,JDBC連接池等,并且第一個實現了對Portal(BEA PORTAL,IBM PORTAL等)的性能管理和監控。通過PowerPack可以看到部署在WEBLOGIC上的應用的各種性能指標,以WEBLOGIC自帶的Medical Records例子來說,如下圖:
可以看到包括系統資源在內的各種性能指標,和J2EE應用中各種組件的性能指標,通過配置可以跟蹤到某一個具體的JSP或者是SERVLET的性能情況,并且可以配置在某一性能指標達到指定的閥值后進行報警操作。
通過提供的Transaction Trace功能來分析超過指定時間的某一具體Transaction的內部情況。
通過樹狀結構可以看到事務內部的調用情況并且快速的定位到某一有問題的操作,通過該技術可實時跟蹤生產系統中的某個具體事務問題,提供事務的執行路徑和組件響應時間的詳細信息,如上圖。并能及時修正事務的性能問題。
除此之外該PowerPack包還提供了針對WEBLOGIC系統運行的一個性能查看控制臺,通過該控制臺可以直觀的監控系統的那一部分出了問題,并且通過控制臺可以方便的定制所關心的各種性能指標,定制后能通過瀏覽器的方式查看整個系統的運行情況。
配置啟動步驟
- BEA Weblogic的安裝(安裝時選擇安裝帶的例子程序,詳細步驟略);
- IntroScope的安裝,安裝后有IntroScope Enterprise Manager,IntroScope Workstation,IntroScope WebViewer三個組件(安裝步驟略);
- PowerPack for WebLogic的安裝。
安裝步驟,只需解壓縮PowerPack包到BEA的安裝目錄內即可(其他目錄也可以,在配置的時候進行指定即可);
- 配置啟動Weblogic
以Weblogic自帶的Medical Records服務為例子,配置方法如下
修改啟動文件startMedRecServer.cmd(不同的JVM配置略有不同)set JAVA_OPTIONS = -Xbootclasspath/p:c:eaweblogic81wilyconnectorsAutoProbeConnector.jar; c:eaweblogic81wilyAgent.jar -Dcom.wily.introscope.agentProfile= c:eaweblogic81wilyIntroscopeAgent.profile
- 啟動IntroScope Enterprise Manager;
- 啟動Weblogic;
- 服務啟動后,通過IntroScope WorkStation登陸后,可以在控制臺看到被監控的應用節點和相關性能節點,展開后可以看到相應的性能指標值。
配置啟動完成后,通過設置相應的監控性能項,在控制臺中可以通過各種不同類型的圖表來觀察系統的運行狀態。
如何發現系統性能問題?
由于例子程序在運行中并沒有很大的壓力,通過控制臺能看到系統的負載情況,為了模擬出和生產系統中相同的運行情況,這里借助于Segue公司的SilkPerformer來對Weblogic的例子程序進行加壓(SilkPerformer也能監控到系統的各項性能指標,這里把采集的數據與Wily進行大概的比較),通過在不同負載下收集到的性能數據,來分析系統中可能存在的性能問題。
模擬運行步驟
- 運行配置好的WEBLOGIC服務;
- 選擇需要進行模擬的業務操作,如選擇登陸操作。
- 用SilkPerformer錄制這段業務操作,生成模擬壓力的腳本;
- 進行壓力模式設置,如圖,設置不同的并發用戶數。
并發用戶數 | 測試時間 |
---|---|
10 | 10分鐘 |
20 | 10分鐘 |
壓力模式設置
可能出現的性能問題和觀察到的性能指標特征描述
性能問題 | 性能指標特征 | 問題描述 |
---|---|---|
系統性能隨負載增加逐漸下降 | WEBLOGIC配置的線程數隨負載的增加出現匱乏。 | 資源瓶頸 |
可預見的死鎖,系統性能隨運行時間的增加逐漸下降 | JDBC連接等資源無法回收,從性能指標圖上可以看出可使用的該資源為0,并有大量等待。 | 資源泄漏等 |
10個并發系統的線程使用情況,通過WILY獲取
PendingRequestCurrentCount=0,WaitingConnectionCurrentCount=0,表明沒有等待的request,系統響應很快。
10個并發系統的JDBC使用情況,通過WILY獲取
Concurrent Invocations 最大值為8,并且平均查詢的時間曲線表現也比較平穩。
20個并發系統的線程使用情況,通過WILY獲取
ExecuteThreadCurrentIdleCount=0,PendingRequestCurrentCount開始有變化,對比10個并發用戶的線程使用情況,很明顯可以看出在20個并發的壓力下,系統的線程資源開始不足。
20個并發系統的JDBC使用情況,通過WILY獲取
平均查詢時間有比較大的起伏,運行一段時間后可以看到該值為0,Connection Count的值也保持不變,基本不響應獲取連接請求。這個時候訪問系統頁面,無法進入。
結論
以上例子只是通過簡單的性能指標來觀察系統運行狀態,對于一個復雜的系統還需要更多的性能指標數據來分析系統是否運行良好,比如可以檢查系統是否存在內存泄漏,網絡速度是否夠快等。一般的系統調優很多都是在出了問題后,憑經驗對照系統的性能表現來進行,很多時候可能會花費很多的時間才能定位的真正的性能瓶頸,借助工具之后,可以直觀的對整個系統的各個部分進行監控,一旦出現問題,可以及時的報警并能迅速定位問題解決問題。