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

利用 Oracle DMS 測量 Java 應用程序性能

2013-11-15 11:38:28  來源: JSP教程 

  如果您開發了一個運行在 Oracle 應用服務器 (OracleAS) 或 Oracle Containers for JEE (OCJ) 上的 Java 應用程序那麼您可以使用 Oracle 的動態監控服務 (DMS) 來測量您的應用程序的性能本文分幾個簡單的步驟說明了如何准備好您的應用程序以進行性能測量並如何讀取結果
  
  Oracle DMS 提供了一組 Java 和 C API 來為 OracleAS 和其它的 Oracle 產品測量和報告性能量度狀態信息和診斷信息Oracle 產品調用 DMS 函數庫例程來計算量度並把它們輸出到 Oracle 企業管理器中有關監控和優化 OracleAS 及其組件的性能的詳細信息請參見 Oracle Application Server g 性能指南
  
  DMS 測量 API 小簡單而高效為了創建定制的量度開發人員在事件發生時重要的時間段開始和結束時或者當預先計算的性能量度改變了它們的值時通知 DMS然後DMS 將量度發送到 Oracle 企業管理器將它們轉儲到文本文件中或者進行格式化以適合 web 浏覽器
  
  下面進行簡要介紹首先您將需要確定您要測量應用程序的動作(可能以某種層次表示例如讀時間寫時間可以結合構成總時間然後創建一個准備這些定時事件的結構的專用 Java 類然後在 Java 應用程序的相關位置上調用這個專用類中的方法來啟動和停止相關的定時器然後運行應用程序(運行多次以采集實際的平均值)並通過一個專門的 URL 來查看時間測量的結果
  
  下面更詳細地介紹了這個過程中的步驟
  
  確定您想要測量的應用程序部分
  下面是根據我自己經驗而編寫的示例為了進行概念驗證我的小組需要顯示 Java 應用程序中的一個特定序列的步驟可以在 秒內執行我們想要測量總時間以及每一個步驟花費多少時間(從而我們能夠指出需要改進的地方)
  
  我們想要測量以下步驟所花費的時間(三層的層次結構)
  
  總時間
  檢索數據(不需部分求和)
  讀取數據庫
  寫入文件
  計算
  計算的初始化
  重復計算步驟
  提交結果
  圖形表示
  字母數字表示
  這些測量必須在應用程序的每次運行中進行以便您能夠比較它們在不同情況下的值並為每一個應用程序組件計算平均時間就我們而言輸入參數之一是計算步驟的數目因此我們運行了幾次每次執行不同數量的步驟因此我們能夠指出哪些部分有一致的性能以及如果我們增加步驟數對於其它的部分需要增加多少時間
  
  安裝 dmsjar
  找到 dmsjar(在 [OCJ_HOME]\lib 或 [OracleAS_HOME]\lib 中)並確保它在您的應用程序的類路徑中(特別在開發環境中因為如果您部署到 OracleAS 或 OCJ 中那麼在部署環境中它將已經存在)如果您使用 JDeveloper那麼您可以將 dmsjar 作為一個資料庫添加到 JDeveloper 項目設置中以實現這一目的為您的項目創建一個新的資料庫然後在它的類路徑中為 dmsjar 增加一個項目(指定到 dmsjar 的完整路徑)
  
  創建類 PerformanceMeasurement
  在您的 Java 應用程序中創建一個新的 Java 類在該類中您可以准備好測量層次結構列表 顯示了一個准備第 步中說明的層次結構的示例類這個示例使用 DMS PhaseEvent 感應器(定時器)來測量在代碼的完整特定部分中所花費的時間並且它使用 DMS Nouns(樹結構)來在一個層次結構中組織 PhaseEvent 感應器這種層次結構類似於文件系統中的目錄結構
  
  測量應用程序
  現在在應用程序中的適當位置開始和停止相應的定時器已非常容易(用 DMS 的術語這稱為 instrumenting您所需要做就是初始化一個 PerformanceMeasurement 對象然後將這個對象傳遞給需要控制這些定時器中的某一個啟動和停止的 Java 例程
  
  下面是一個示例代碼段
  
  // Initialize Performance Measurement object
  p = new PerformanceMeasurement(MyApplication_+numberOfSteps+_steps);
  pstart(pTOTAL);
  
  // And now the actual steps in the case
  DataHandlergetData(p);
  doCalculations(p);
  generateChart(p);
  
  您可以按您的需要頻繁調用 pstart 和 pstop只要您確保對於某個定時器的每一次啟動操作總存在對該定時器的停止操作
  
  例如
  
  pstart(pREADING);
  // Load the Oracle JDBC driver and connect to the database
  
  pstop(pREADING);
  
  pstart(pWRITING);
  // Initialize output file
  
  pstop(pWRITING);
  
  pstart(pREADING);
  // Get first batch of data
  
  pstop(pREADING);
  
  pstart(pWRITING);
  // Write first batch of data
  
  pstop(pWRITING);
  
  記住您還必須手動啟動和停止 Total 和 Subtotal 定時器
  
  捕獲一個頁面在浏覽器中完全顯示的時刻
  在我們的概念驗證中將在浏覽器中顯示圖形和字母數字數據所需的時間包括在我們的測量中是必需的我們的頁面相當大因此完全加載它要花一些時間
  
  我們使用一個 Javascript 陷阱來捕獲結束時間Javascript 在客戶機上執行因此如果您將一段腳本放在頁面的末尾那麼只有頁面在客戶機上完全加載時才執行在那段腳本中我們調用了另一個頁面該頁面調用了一個 Java 方法來停止相應的定時器
  
  下面是一個示例 JSP 代碼段
  
  <jsp:useBean id=myApplicationBean class=MyApplicationBean scope=session>
  
  <! Do all the calculation stuff first >
  <%
   myApplicationBeandoSteps();
   myApplicationBeanpstart(myApplicationBeanpGRAPHICAL);
   %>
   show chart
  <%
   myApplicationBeanpstop(myApplicationBeanpGRAPHICAL);
   myApplicationBeanpstart(myApplicationBeanpALPHANUMERIC);
  %>
   show alphanumerical data
  <%
   myApplicationBeanpstop(myApplicationBeanpALPHANUMERIC);
  %>
  <script>
   windowopen(Stopjsp stop width=height=);
  </script>
  </JSP:USEBEAN>
  <JSP:USEBEAN class=MyApplicationBeanid=myApplicationBean scope=session>
  
  下面是 Stopjsp 的源代碼
  
  <%@ page contentType=text/html;charset=windows%>
  <jsp:useBean id=hopCalBean class=HopCalBean scope=session/>
  
  Stop!!!!
  
  <% myApplicationBeanstop(); %>
  
  myApplicationBeanstop() 方法包含以下 Java 代碼
  
  /*
  * This method will be called after everything has been done
   */
  public void stop()
  {
  pstop(pPRESENTATION_TOTAL);
  pstop(pTOTAL);
  pwriteLogFile(d://temp//MyApplicationPerformancelog);
  }
  
  運行應用程序
  現在將經過測量的應用程序部署到 OracleAS 或 OCJ 中並運行它DMS 將采集時間統計數據
  
  如果您想比較幾次運行的時間測量結果請多次運行您的應用程序(可能用不同的變量變量可以在初始化 PerformanceMeasurement 對象時放到運行名稱中)
  
  在浏覽器中查看 DMS 輸出
  如果您編寫了對 pwriteLogFile 的調用那麼您可以查看該日志文件的內容它包含原始的 DMS 數據
  
  通過在應用服務器上調用一個特定的 URL可以找到一種更加清晰的數據表示方法用您的 Java 應用程序使用的應用服務器的主機名和端口號來替換 [host:port]
  
  對於獨立的 OCJ使用//[host:port]/dms/Spy
  對於 OracleAS使用//[host:port]/dmsocj/Spy
  您將看到如下頁面
  
 educitycn/img_///gif>

  正如您所看到的DMS 還收集 JDBCJVM 和 OCJ 的統計數據並且無需任何進一步的調整關於內置性能量度的一個列表請參見 Oracle Application Server g 性能指南的附錄 A
  
  要查看某種類別的詳細信息請單擊左邊框中的名稱
  
educitycn/img_///gif>

  總結
  如果您以一種結構化的方式安裝了 DMS Nouns 和 DMS PhaseEvent Sensors(利用一個 PerformanceMeasurement 類)那麼利用 DMS您可以容易地測量您的 Java 應用程序的性能並且獲得性能時間測量結果的一種易讀的結構化輸出
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19348.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.