使用 WebSphere Application Server 執行性能測試和分析
內容

簡介
性能測試的重要作用
合適的性能測試的最佳實踐
測試案例和負載驅動程序
DayTrader 示例
使用 JMeter
運行測試
分析結果
性能工具
垃圾收集分析
方法探查分析
鎖定分析
結束
IBM® WebSphere® Application Server 支持的應用程序越來越多,每個應用程序都具有其自己的獨特功能、需求和服務集合。對這些應用程序中的每一個執行合適的性能測試和分析,對確保它們以最高性能執行至關重要。本文提供一些有關如何構建性能測試、對比不同應用或環境更改的結果,以及如何使用免費的 IBM 工具識別瓶頸的最佳實踐指南。這裡介紹的方法適用於所有 WebSphere Application Server 版本,包括新發布的 WebSphere Application Server V8.5。
簡介
您能將任何這些陳述聯繫起來嗎:
目前我們還未做任何性能測試。我們想做,但不確定從何處入手。
我們的應用程序運行得很好,但在開發團隊發給我們一個更新版本用於部署後,我們在服務器上體驗到了高得多的 CPU 使用率。高 CPU 使用率緣何而來?
我們將應用程序從 2.0 版遷移到了 3.0 版,現在響應時間是以前的 3 倍。是什麼導致了這些延遲?
我們的應用程序需要在接下來的 3 個月支持超過 40% 的用戶。除了簡單地向集群添加更多機器,我們還能為此準備什麼?
這些陳述代表着非常常見的場景,所以如果聽到任何這些熟悉的聲音,那麼您並不孤單。本文的目標是解決這些類型的情景,提供一些有關執行測試的基本過程和可用的適用工具的一些最佳實踐建議。總體來講,這裡討論的主要主題將幫助您:
• 編寫有用的性能測試案例。
• 駕馭不同的負載量以降低和提高利用率。
• 激勵關鍵性能和系統指標。
• 與應用程序開發周期並行地執行性能測試。
• 使用 IBM Health Center 等工具查找性能瓶頸。
• 與開發團隊合作修復瓶頸並重新度量。
性能測試的重要作用
曾幾何時,性能測試被視為在部署到生產之前才做的事情。它常常只有非常少的工作量,沒有分配足夠的時間來識別和修復最終將在生產環境中出現的真實問題。要執行合適的性能測試,一種普遍推薦的方法是實現
性能生命周期,其中性能測試計劃為開發工作的一部分,集成了迭代式測試作為新功能。這能夠在將所有功能部署到生產環境之前,就能夠很早地識別出瓶頸,並解決這些問題。
合適的性能測試的另一個好處是有機會調節環境(操作系統、JVM、應用服務器、應用程序和數據庫等)以實現最大性能。只有通過合適的性能測試,才能調節所評估的參數以確定它們是否提供了任何價值。許多用戶基於開發人員建議來設置 JVM 堆大小,不會調節其他任何參數,因為這被認為沒有必要。您可能會很驚奇,只需執行一些簡單的調節步驟,即可將為調節的環境所需的硬件量減少一半。本文將證明這一點。
使用一些簡單的調節過程,DayTrader 性能基準測試應用程序可處理兩倍於未調節環境的負載。這意味着相同數量的用戶可能只需使用一半的可用硬件資源即可支持。想想這能夠節省的成本。
除了在整個開發周期執行迭代測試和用於調節用途的測試優勢,廣泛性能測試的另一個主要優勢是,能夠對比不同應用程序和環境改變的結果。真實的性能測試會記錄關鍵指標,使管理員能夠洞察可能出現的問題(稍後將討論)。回到上面的一種常見評論,許多用戶在遷移到更新的應用程序版本時,都未準備好找出問題的根源,因為他們從未對以前的版本執行合適的性能測試或記錄關鍵系統指標。缺少此工作,具有更糟的應用程序版本的測試服務器可能需要設置為一個對比點。有了此類型的數據,就可以容易得多地分析性能降級來自何處。
合適的性能測試的最佳實踐
有兩條基本的合適性能測試最佳實踐,它們可總結如下:
• 改變用戶(或客戶端負載)數量。一個生產環境通常在一天之內具有不同數量的活動用戶。質量測試可確保應用程序在小負載和峰值(例如黑色星期五)負載下良好地執行。這可能意味着請求之間的 “思考” 時間的更改和使用應用程序的活動用戶數量的更改。這麼做的一種最佳方式是對 1 位活動用戶、2 位用戶、4 位用戶、8 位用戶等執行測試。您稍後將看到此方法的實際應用。
• 記錄關鍵系統和性能指標。應該為所有場景記錄一些重要的指標。對於每次性能運行,要記錄的最重要指標是:
◦ 吞吐量(每秒請求數)
◦ 響應時間
◦ 應用服務器機器 CPU 利用率 %
◦ 其他機器 CPU 利用率 %,如 Web 服務器、負載驅動程序和數據庫(如適用)
只要使用了負載驅動工具,就可以看到吞吐量和響應時間指標。對於 CPU 利用率、內存利用率、磁盤 I/O 和網絡流量指標,可以使用 Linux® 或 AIX® 上的 vmstat 或 nmon 工具進行查看,或者使用 Windows® 上的任務管理器進行查看。除了上述指標之外,記錄所有系統級信息也很重要。這包括操作系統級別、活動核心數量、可用內存 (RAM) 量、“Java™ 版本” 輸出、WebSphere Application Server 版本信息,以及所有已應用的調節。記錄所有這些指標使您能夠迅速對比不同場景,即使對比的場景的測試時間已相隔兩年。
許多用戶沒有可用於再現與測試環境大小相同的生產環境的硬件。在這些情況下,推薦的方法是基於可用的資源來擴展性能測試。例如,假設一個生產環境包含 10 個物理機器,每個機器運行兩個 WebSphere Application Server 實例。如果一個物理機器都可用於性能測試工作,那麼此機器可設置為與生產機器儘可能相同,並且性能測試中使用的負載將大約為預期生產工作負載的 10%。最終,應該擴展性能測試,以再現完整的生產環境。這樣,其他流程(比如數據庫和 LDAP)的負載也會進行測試。
測試案例和負載驅動程序
執行性能測試和查找應用程序瓶頸的第一步是編寫有用的測試案例。結果和分析取決於用於生成它們的測試案例,所以這一步不應輕率地執行。與對所有用戶都將使用的代碼路徑執行壓力測試相比,對用戶僅花了不到 10% 的時間的應用程序代碼路徑執行壓力測試的效果差得多。首先專註於最流行的代碼路徑,然後為更少利用的代碼路徑構建您自己的測試。在這裡花一些時間真正創建一個模擬實際用戶流量的高質量測試案例。這篇 developerWorks 文章
是幫助開始編寫性能測試案例的一個不錯的資源。
定義了測試案例概念之後,您將需要通過一個性能負載驅動工具將它應用於實踐。有許多負載驅動程序可供選擇,包括
IBM Rational Performance Tester
和 Apache 的開源
Jmeter。本文將使用後者。
DayTrader 示例
如果您之前閱讀過 developerWorks 上的任何性能文章,那麼您很可能已聽說過 “Trade” 或 “DayTrader” 基準測試。Apache DayTrader Performance Benchmark Sample
應用程序模擬了一個簡單的股票交易應用程序,它讓用戶登錄/註銷、查看他們的投資組合,查找股票報價,購買和銷售股票,並管理帳戶信息。DayTrader 不僅可用作功能測試的出色應用,還提供了一組標準的工作負載集來描繪和度量應用服務器和組件級性能。
DayTrader 構建於一組核心的 Java EE 技術之上,包括用於表示層的 Java servlet 和 JavaServer™ Pages (JSP),以及用於後端業務邏輯和持久性層的 Java 數據庫連接 (JDBC)、Java Message Service (JMS)、Enterprise JavaBeans (EJBs) 和消息驅動的 bean (MDB)。圖 1 給出了該應用程序架構的總體概述。
圖 1. DayTrader 應用程序概述

IBM 發布了一個樣例
DayTrader 包
供下載,它包含 DayTrader 應用程序和所需的部署描述符,可以將它們安裝在 WebSphere Application Server V7.0 或更高版本上。
在此示例中,將 DayTrader 樣例應用程序部署成了 WebSphere Application Server V8.5 的一個基本實例。一個簡便的 DayTrader 功能是
Configuration
選項卡下的
TradeScenarioServlet
鏈接。它會鏈接到模擬一群 Web 用戶的一個 servlet,為每個訪問該 servlet 的用戶隨機生成具體的 DayTrader 操作。(例如,一個用戶可查看他的投資組合、一個用戶可執行股票購買操作,一個用戶可查找一個股票報價等)。這可確保 DayTrader 中的每個主要操作都會在測試期間執行,因為它是隨機的,所以一段時間後每個操作都應執行大體相同的次數。有許多參考資料介紹了如何使用 JMeter 編寫非常複雜的性能測試,其中可為每個操作指定使用的準確次數和使用順序,但出於本文的用途,測試案例將會保持相對簡單並使用此 TradeScenarioServlet。
使用 JMeter
設置 Jmeter 並運行它來執行性能測試:
1. 安裝 Jmeter。指向您的
java
目錄,使用
jmeter.sh
或
jmeter.bat
腳本從 <JMeter_Home>/bin/ 目錄啟動 JMeter。您應看到一個類似圖 2 的面板。
圖 2. JMeter 默認試圖
2. 右鍵單擊
Test Plan
並轉到
Add > Thread Group。這是您定義要處理其負載的用戶數量的地方。對於初學者,使用以下值(參見圖 3):
◦ 線程(用戶)數量:1
◦ 循環數量:Forever
3.
圖 3. JMeter Thread Group 視圖
4. 右鍵單擊您剛創建的線程組,轉到
Add > Sampler。一個抽樣器 (sampler) 定義您希望處理的負載類型。有針對 HTTP 請求、JMS 請求、Web 服務消息等的抽樣器。JMeter 用戶手冊記錄每個可用的抽樣器。因為 DayTrader 支持基於 Web 的流量,所以此示例使用
HTTP Request。依據您的環境填寫主機名、端口和路徑的值(參見圖 4)。
圖 4. HTTP 請求
以下文章點擊率最高
Loading…