如果您開發了一個運行在 Oracle 應用服務器 (OracleAS) 或 Oracle Containers for J
EE (OC
J) 上的 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 找到 dms
jar(在 [OC
J_HOME]\lib 或 [OracleAS_HOME]\lib 中)
並確保它在您的應用程序的類路徑中(特別在開發環境中
因為如果您部署到 OracleAS 或 OC
J 中
那麼在部署環境中它將已經存在)
如果您使用 JDeveloper
那麼您可以將 dms
jar 作為一個資料庫添加到 JDeveloper 項目設置中
以實現這一目的
為您的項目創建一個新的資料庫
然後在它的類路徑中為 dms
jar 增加一個項目(指定到 dms
jar 的完整路徑)
第 步創建類 PerformanceMeasurement 在您的 Java 應用程序中創建一個新的 Java 類
在該類中您可以准備好測量層次結構
列表
顯示了一個准備第
步中說明的層次結構的示例類
這個示例使用 DMS PhaseEvent 感應器(
定時器
)來測量在代碼的完整特定部分中所花費的時間
並且它使用 DMS Nouns(
樹結構
)來在一個層次結構中組織 PhaseEvent 感應器
這種層次結構類似於文件系統中的目錄結構
第 步測量應用程序 現在
在應用程序中的適當位置開始和停止相應的定時器已非常容易(用 DMS 的術語
這稱為
instrumenting
)
您所需要做就是初始化一個 PerformanceMeasurement 對象
然後將這個對象傳遞給需要控制這些定時器中的某一個啟動和停止的 Java 例程
下面是一個示例代碼段
// Initialize Performance Measurement object
p = new PerformanceMeasurement(
MyApplication_
+numberOfSteps+
_steps
);
p
start(p
TOTAL);
// And now the actual steps in the case
DataHandler
getData(p);
doCalculations(p);
generateChart(p);
您可以按您的需要頻繁調用 p
start 和 p
stop
只要您確保對於某個定時器的每一次啟動操作
總存在對該定時器的停止操作
例如
p
start(p
READING);
// Load the Oracle JDBC driver and connect to the database
p
stop(p
READING);
p
start(p
WRITING);
// Initialize output file
p
stop(p
WRITING);
p
start(p
READING);
// Get first batch of data
p
stop(p
READING);
p
start(p
WRITING);
// Write first batch of data
p
stop(p
WRITING);
記住您還必須手動啟動和停止 Total 和 Subtotal 定時器
第 步捕獲一個頁面在浏覽器中完全顯示的時刻 在我們的概念驗證中
將在浏覽器中顯示圖形和字母數字數據所需的時間包括在我們的測量中是必需的
我們的頁面相當大
因此完全加載它要花一些時間
我們使用一個 Javascript 陷阱來捕獲結束時間
Javascript 在客戶機上執行
因此如果您將一段腳本放在頁面的末尾
那麼只有頁面在客戶機上完全加載時才執行
在那段腳本中
我們調用了另一個頁面
該頁面調用了一個 Java 方法來停止相應的定時器
下面是一個示例 JSP 代碼段
<jsp:useBean id=
myApplicationBean
class=
MyApplicationBean
scope=
session
>
<!
Do all the calculation stuff first
>
<%
myApplicationBean
doSteps();
myApplicationBean
p
start(myApplicationBean
p
GRAPHICAL);
%>
show chart
<%
myApplicationBean
p
stop(myApplicationBean
p
GRAPHICAL);
myApplicationBean
p
start(myApplicationBean
p
ALPHANUMERIC);
%>
show alphanumerical data
<%
myApplicationBean
p
stop(myApplicationBean
p
ALPHANUMERIC);
%>
<script>
window
open(
Stop
jsp
stop
width=
height=
);
</script>
</JSP:USEBEAN>
<JSP:USEBEAN class=MyApplicationBeanid=myApplicationBean scope=
session
>
下面是 Stop
jsp 的源代碼
<%@ page contentType=
text/html;charset=windows
%>
<jsp:useBean id=
hopCalBean
class=
HopCalBean
scope=
session
/>
Stop!!!!
<% myApplicationBean
stop(); %>
myApplicationBean
stop() 方法包含以下 Java 代碼
/*
* This method will be called after everything has been done
*/
public void stop()
{
p
stop(p
PRESENTATION_TOTAL);
p
stop(p
TOTAL);
p
writeLogFile(
d://temp//MyApplicationPerformance
log
);
}
第 步運行應用程序 現在將經過測量的應用程序部署到 OracleAS 或 OC
J 中
並運行它
DMS 將采集時間統計數據
如果您想比較幾次運行的時間測量結果
請多次運行您的應用程序(可能用不同的變量
變量可以在初始化 PerformanceMeasurement 對象時放到運行名稱中)
第 步在浏覽器中查看 DMS 輸出 如果您編寫了對 p
writeLogFile 的調用
那麼您可以查看該日志文件的內容
它包含原始的 DMS 數據
通過在應用服務器上調用一個特定的 URL
可以找到一種更加清晰的數據表示方法
用您的 Java 應用程序使用的應用服務器的主機名和端口號來替換 [host:port]
對於獨立的 OC
J
使用//[host:port]/dms
/Spy
對於 OracleAS
使用//[host:port]/dmsoc
j/Spy
您將看到如下頁面
educitycn/img_///gif> 正如您所看到的
DMS 還收集 JDBC
JVM 和 OC
J 的統計數據
並且無需任何進一步的調整
關於內置性能量度的一個列表
請參見 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