論壇文章
DevPartner Java實務技術探討─ 效能分析篇

解決Java應用程式效能不彰之獨門訣竅

程式問題狀況不斷

相信大多數的程式開發人員都不會故意撰寫品質不佳的程式碼供人使用,但或許是因為專案時程的壓力、或不熟悉撰寫程式技術、也或許是缺乏做適當及應變處理的經驗,而使撰寫出來的程式品質不佳,問題狀況不斷。

原本運作正常的應用程式在正式上線幾週後,卻發生系統效能不如原先預期,不僅程式效能遲緩,甚至到後來不堪使用。例如,當500名User同時連線執行Java應用程式,整體運作與程式效能表現都很正常,但當User增加為700名時,卻有系統效能明顯下降情況發生。這樣的情形是程式開發人員在撰寫程式時無法事先預知,這也增加程式開發人員在撰寫高效能的Java應用程式的困難度。另一種常見的情況是,應用程式單獨運作時,系統效能表現均屬正常,但一旦與其他應用程式共同執行時,效能表現卻不理想。

其他如記憶體洩漏(Leak)、暫時性物件(Temporary Object)的過度使用、或是缺乏記憶體管理之最佳化等類似問題一再重複上演,讓程式開發人員很難發現程式裡隱藏的錯誤。

找出問題癥結  遏止效能不彰問題發生

即使在實務的操作與運用上已知會遭遇到上述的問題,但程式開發人員仍無法確實掌握問題並解決之,常見程式效能不彰的問題如,是否受到太多不需立即用到的類別(Class)模組載入的 影響所致?還是因為被分配太多尚未被Java自動垃圾收集器(Automatic Garbage Collector)正確的釋放掉所影響?也有可能是暫時性物件停留在記憶體內,佔用掉寶貴的記憶體空間所致。

若程式開發人員能立即從錯誤的程式碼中找到問題癥結,就能有效遏止Java應用程式效能不彰的問題發生。叡揚資訊代理美國Compuware 公司的DevPartner Java Edition是一套專為程式開發人員設計的程式開發與除錯的解決方案,能迅速找出Java應用程式中的執行階段錯誤、記憶體問題、及效能瓶頸等障礙。不同於以往的Java程式碼分析產品,DevPartner Java Edition能讓程式開發人員穿越多執行緒Java應用程式的所有階層,進而分析程式碼的測試涵蓋度與穩定度,支援多種應用伺服器(Application Server)、Servlet Engines及Web Server,同時收集在Java Servlets、Applets、JavaBeans、Enterprise Java Beans及Java Server Pages上的各種資訊。

加速效能瓶頸排除  讓問題迎刃而解

為說明DevPartner Java Edition工具確實能有效、迅速解決Java應用程式執行效能不佳的問題,筆者接下來將示範,並說明程式開發人員如何利用DevPartner Java Edition工具精確的找出程式中發生效能瓶頸的程式碼位置。

1. 開啟DevPartner Java工具,選取效能分析模組,執行啟動應用伺服器。如(圖一)所示。

2. 程式開發人員開啟另一個IE瀏覽器,以Single User執行Java Web Application,並重複Reload該網頁,發現並無任何異狀,如(圖二)所示。

3. 以Microsoft IIS Stress工具錄製存取該網頁的腳本(Script),並對該網頁進行20個Concurrent User的壓力測試,重新Reload原本IE瀏覽器上的網頁,發現執行速度明顯變慢,執行等待結果的時間從0.24秒劇增至214.6秒,如(圖三)所示。

4. 接著,程式開發人員返回DevPartner Java畫面,點選View Result,檢視Call Graph,發現Java程式在執行後,endMethod佔高達86.63%的執行緒時間,並在第212行程式碼位置,出現高達86.68%的執行緒時間,如 (圖四) 及 (圖五) 。

5. 程式開發人員利用DevPartner Java Edition工具找出應用程式中發生效能瓶頸的程式碼後,就能進行重新改寫,重新部署到應用伺服器並執行壓力測試,很快的,程式開發人員就能看見原先Java應用程式效能不佳的問題立即獲得明顯的改善,如(圖六)所示。

透過DevPartner Java Edition工具的協助,不僅能加速Java應用程式的開發時程,還可提高應用程式的執行效能,避免開發人員浪費諸多的時間在分析與程式除錯上。DevPartner Java Edition方便程式開發人員安排解決問題的優先順序,加速效能瓶頸的排除,讓問題迎刃而解。