最近,部門的一個關于基礎數據和權限控制的項目已近尾聲,可由于性能的問題,一直沒有做好正式上線運行的準備,由此,引發了一些我對壓力測試的認識。
MI 的LoadRunner8.0是一個工業級負載測試標準工具,用它進行壓力測試,可以節約公司的人力,財力, 它本身可以模擬成千上萬個用戶并發訪問系統,給系統一定的壓力,模擬實際的生產環境,并且根據測試結果,它可以幫助我們分析系統的瓶頸,提供我們應用系統的性能。它分三個部分,首先要錄制腳本,并在此基礎上進行一些編輯(例如設置集合點,事務,參數化數據等),然后把這個腳本放到一個特定的場景里去執行,執行前可以進行一些運行期的設置,運行過程中可以監控系統的一些反映參數,最后通過它的分析工具來分析測試結果,給我們的應用系統提供一些性能方面的合理化建議。
壓力測試做完之后,雖然知道了問題,但是問題的方向是比較模糊的,為此,可以借助Quest公司的JProbe Suite性能測試工具進行內存,代碼覆蓋,方法調用時間方面的分析,查出具體的問題,進行修改發布之后,再利用LoadRunner進行反復測試,看性能是否優化了。
在壓力測試的過程中,應用服務器和數據庫的一些參數調優也是非常重要的,針對應用服務器,比較重要的參數有jvm占用堆大小,線程池的大小,連接池的大小,prepareStatement Cache條數大小;針對數據庫,表空間,索引,事務級別,鎖大小,臨時表這些參數也對系統應用有重要的影響。同時,在java應用里,sql優化,數據庫連接的管理,緩存的使用,查詢分頁,防內存泄露的代碼的使用會直接對應用系統造成巨大的性能影響。
跟蹤應用服務器里jvm垃圾回收的頻率和所消耗時間的時候,可以加 -Xverbosegc參數來打印垃圾回收的詳細信息。分析gc日志的工具有GCAnalyze 和HeapRoot 。