熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

優化Web Sphere性能應用技巧集錦

2013-11-13 16:21:35  來源: Oracle 

  優化Web應用的性能絕不象有些人想象的那樣簡單易行它涉及到諸多技術從最簡單的HTML代碼修改到復雜的EJB改造無不涉及性能問題但有一點是非常清楚的要想找出和解決Web應用的性能瓶頸就必須深入全面地了解信息在Web應用中的流程
  
  改善Web應用的性能不一定要局限於Web應用的Java代碼例如有些時候簡單地改動一下HTML頁面的質量減少其傳輸頻度和數據量就可以有效地提高應用的性能表現有時提高性能的關鍵卻在於修改Web應用的數據庫訪問部分——這只是Java代碼之外影響性能的兩個因素其他還有許多因素會影響到Web應用的整體性能表現另一方面就Java程序本身而言其性能優化又可以分成三個領域基本的Java代碼優化JSP/Servlet優化EJB優化
  
  一表現層優化
  
  Web應用的最大性能瓶頸常常不在其他地方而在於最基本的網絡帶寬限制如果你的Web應用也面臨這類問題提高性能最簡單的辦法是減少HTTP傳輸例如用JavaScript實現客戶端編輯功能以減少數據傳輸次數避免將數據發送到服務器端再執行合法性驗證之類的編輯操作
  
  應當采用一切可能措施減少通過網絡傳輸的數據例如你可以要求浏覽器緩沖模塊化的JavaScript文件在SCRIPT標記的SRC中指定
  
  SCRIPT LANGUAGE=JavaScript SRC=FormChekjs
  
  其他減少網絡傳輸應當注意的地方還包括避免過度使用隱藏域減少超長Cookie值在RADIOCHECKBOX和SELECT域中用代碼來替代長長的字符串等等不過在HTML優化方面本文不准備作全面的討論因為WebSphere應用的開發者一般不會擔負設計表現層的責任只要了解下面這個原理就足夠了
  
  性能技巧之一盡可能減少HTTP數據傳輸的總量和頻度
  
  二數據庫訪問
  
  朋友小A對Java的了解極為有限但他卻成功地改進了許多WebSphere應用的性能他是怎麼做到的呢?原來小A是一個數據庫專家他通過優化數據庫訪問有效地改進了整個應用的性能但對於Java他只是略微了解一些有關JDBC的知識在優化數據庫訪問時小A做的第一件事情總是檢查數據庫的設計有時他會建議重新構造數據庫的結構(必須指出的是為了提高性能而重新構造數據庫結構有時可能使數據庫反規格化(DeNormalization)從而帶來維護方面的問題)
  
  性能技巧之二規格化(Normalization)數據庫結構
  
  小A做的第二件事情是執行數據庫分析根據分析結果提出增加某個索引減少某個索引的建議完成這一步驟後小A通常可以讓應用有令人滿意的性能表現根本不必去查看應用的Java代碼
  
  性能技巧之三針對常用的SQL操作建立索引刪除多余的索引
  
  有時為了進一步優化應用的性能小A會檢查Java(也許應該說是SQL)代碼經常找到Java程序沒有合理運用PreparedStatement和連接緩沖池的情形只要把Statement類的動態SQL替換成PreparedStatement類的靜態SQL從連接池提取SQL連接(而不是直接創建連接)應用的性能將得到顯著的改善注意DB UDB(包括其他一些數據庫)的PreparedStatement是可調整和配置的
  
  性能技巧之四合理運用PreparedStatement和連接池
  
  進一步分析應用的工作流程之後小A有時會建議批量執行某些SQL命令這樣就只需一個對數據庫服務器的請求就可以運行大量的SQL命令
  
  性能技巧之五考慮批量執行SQL命令
  
  既然如此小A有時還會指出如果應用中有些SQL命令可以組合成單個事務邏輯那麼應該可以用一個存儲過程來替代DB UDB的存儲過程語言(SPLStored Procedure Language)非常強大如果把數據庫操作邏輯從Web應用轉移到數據庫一般總是對性能有益不過需要注意的是雖然批量執行SQL命令或使用存儲過程會提高性能但就象重新構造數據庫結構一樣有時會帶來維護方面的困難
  
  性能技巧之六考慮使用數據庫存儲過程
  
  檢查JDBC代碼的時候小A總是留意對象有沒有及時正確釋放這一點其實很重要
  
  性能技巧之七及時關閉不用的StatementResultSetConnection等對象(但不是在finalize方法內)
  
  三Java代碼
  
  前面我們以小A的經驗為例探討了Web應用中數據庫訪問性能的重要性調整好數據庫之後接下來要做的自然是深入分析應用的Java代碼從哪裡入手呢?你最好使用Java分析工具來找出性能問題的焦點所在優化Java代碼的性能是一個艱苦的過程因此一個重要的原則是把精力集中到那些可能引起性能問題的代碼上換句話說就是要尊重/規則利用Java分析工具的結果調整帶來%性能開銷的那%代碼
  
  性能技巧之八用Java分析工具清楚地界定性能問題所在
  
  目前市場上已經有許多優秀的Java分析工具例如ejtechnologie的JProfile()Klgroup的Jprobe()以及Intuitive Systems的OptimizeIt()不過不要忘記WebSphere Studio Application Developer(WSAD)本身也集成了一個優秀的分析器有條件的話最好多用幾種分析工具分析Java代碼
  
  考慮到資金問題你不一定樂意購買昂貴的分析軟件但你可以用Java本身的命令行工具生成分析信息例如在JDK 你可以用下面的命令將TestOrderProcessing類的CPU使用情況保存到javahprof文件java Xrunhprof:cpu=timesformat=afile=javahprof TestOrderProcessing
  
  這種辦法的缺點是它提供的信息條理不夠清楚比較繁雜也許可以找到一些源代碼開放的工具輔助分析但一般不如使用WSAD本身的分析工具或商業化的分析工具方便另外如果你已經了解哪些代碼塊可能引起性能問題可以通過保存系統時間的方式獲得分析信息例如
  long startTime = SystemcurrentTimeMillis();
  // 執行某些操作
  long endTime = SystemcurrentTimeMillis();
  
   基本篇
  
  有人建議穩定性第一速度第二一般而言遵從這個建議是不會錯的但這並不妨礙我們在編寫代碼的同時運用某些已經證實的性能技巧例如我們都知道String類是不可變的連接兩個String是一項開銷很大操作
  
  性能技巧之九用StringBuffer來連接兩個字符串
  
  也許你已經注意到Sun的許多標准Java類是線程安全的這些類內部的同步機制實際上很容易造成性能問題例如Vector類就是一個線程安全的類除非確實要用到同步機制否則使用Vector是不值得的如有可能應當盡量改用非線程安全的類如ArrayList
  
  性能技巧之十只有在必要時才運用線程安全的類
  
  許多人習慣使用Systemoutprintln來輸出跟蹤信息但println要占用不少資源所以輸出跟蹤信息最好使用專用日志記錄框架如IBM的JRas或Apache的Logj
  
  性能技巧之十一用日志記錄框架類輸出跟蹤信息而不是使用Systemoutprintln
  
  最後一個提高代碼性能的簡單技巧是清除類裡面的調試信息減小類的體積IBM有一個WSAD插件它提供了一個叫做setDebugInfo的任務可以從Ant腳本調用
  
  性能技巧之十二從正式發行的軟件中刪除調試信息
From:http://tw.wingwit.com/Article/program/Oracle/201311/18198.html
  • 上一篇文章:

  • 下一篇文章:
  • Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.