java性能:利用OracleDMS测量Java应用程序性能




  如果您开发了个运行在 Oracle 应用服务器 (OracleAS) 或 Oracle Containers for J2EE (OC4J) 上 Java 应用那么您可以使用 Oracle 动态监控服务 (DMS) 来测量您应用性能本文分几个简单步骤介绍说明了如何准备好您应用以进行性能测量并如何读取结果
  
  Oracle DMS 提供了组 Java 和 C API 来为 OracleAS 和其它 Oracle 产品测量和报告性能量度、状态、信息和诊断信息Oracle 产品 DMS 库例程来计算量度并把它们输出到 Oracle 企业管理器中有关监控和优化 OracleAS 及其组件性能详细信息请参见 Oracle Application Server 10g 性能指南
  
  DMS 测量 API 小、简单而高效为了创建定制量度开发人员在事件发生时、重要时间段开始和结束时、或者当预先计算性能量度改变了它们值时通知 DMS然后DMS 将量度发送到 Oracle 企业管理器将它们转储到文本文件中或者进行格式化以适合 web 浏览器
  
  下面进行简要介绍:首先您将需要确定您要测量应用动作(可能以某种层次表示;例如“读时间”和“写时间”可以结合构成“总时间”)然后创建个准备这些定时“事件”结构专用 Java 类然后在 Java 应用相关位置上这个专用类中思路方法来启动和停止相关定时器然后运行应用(运行多次以采集实际平均值)并通过个专门 URL 来查看时间测量结果
  
  下面更详细地介绍了这个过程中步骤:
  
  第 1 步:确定您想要测量应用部分
  下面是根据我自己经验而编写举例:为了进行概念验证小组需要显示 Java 应用个特定序列步骤可以在 10 秒内执行我们想要测量总时间以及每个步骤花费多少时间(从而我们能够指出需要改进地方)
  
  我们想要测量以下步骤所花费时间( 3层层次结构):
  
  总时间
  检索数据(不需部分求和)
  读取数据库
  写入文件
  计算
  计算
  重复计算步骤
  提交结果
  图形表示
  字母数字表示
  这些测量必须在应用每次运行中进行以便您能够比较它们在区别情况下并为每个应用组件计算平均时间就我们而言输入参数的是计算步骤数目因此我们运行了几次每次执行区别数量步骤因此我们能够指出哪些部分有性能以及如果我们增加步骤数对于其它部分需要增加多少时间
  
  第 2 步:安装 dms.jar
  找到 dms.jar(在 [OC4J_HOME]\\lib 或 [OracleAS_HOME]\\lib 中)并确保它在您应用类路径中(特别在开发环境中如果您部署到 OracleAS 或 OC4J 中那么在部署环境中它将已经存在)如果您使用 JDeveloper那么您可以将 dms.jar 作为个资料库添加到 JDeveloper 项目设置中以实现这为您项目创建个新资料库然后在它类路径中为 dms.jar 增加个项目(指定到 dms.jar 完整路径)
  
  第 3 步:创建类 PerformanceMeasurement
  在您 Java 应用中创建个新 Java 类在该类中您可以准备好测量层次结构列表 1 显示了个准备第 1 步中介绍说明层次结构举例类这个举例使用 DMS PhaseEvent 感应器(“定时器”)来测量在代码完整特定部分中所花费时间并且它使用 DMS Nouns(“树结构”)来在个层次结构中组织 PhaseEvent 感应器这种层次结构类似于文件系统中目录结构
  
  第 4 步:测量应用
  现在在应用适当位置开始和停止相应定时器已非常容易(用 DMS 术语这称为 \"instrumenting\")您所需要做就是个 PerformanceMeasurement 对象然后将这个对象传递给需要控制这些定时器中个启动和停止 Java 例程
  
  下面是个举例代码段:
  
  // Initialize Performance Measurement object
  p = PerformanceMeasurement(\"MyApplication_\"+numberOfSteps+\"_steps\");
  p.start(p.TOTAL);
  
  // And now the actual steps in the
  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 定时器
  
  第 5 步:捕获个页面在浏览器中完全显示时刻
  在我们概念验证中将在浏览器中显示图形和字母数字数据所需时间包括在我们测量中是必需我们页面相当大因此完全加载它要花些时间
  
  我们使用个 Javascript 陷阱来捕获结束时间Javascript 在客户机上执行因此如果您将段脚本放在页面末尾那么只有页面在客户机上完全加载时才执行在那段脚本中我们了另个页面该页面个 Java 思路方法来停止相应定时器
  
  下面是个举例 JSP 代码段:
  
  <jsp:useBean id=\"myApplicationBean\" =\"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=50,height=50\');
  </script>
  </JSP:USEBEAN>
  <JSP:USEBEAN =MyApplicationBeanid=myApplicationBean scope=\"session\">
  
  下面是 Stop.jsp 源代码:
  
  <%@ page contentType=\"text/html;char=windows-1252\"%>
  <jsp:useBean id=\"hopCalBean\" =\"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\");
  }
  
  第 6 步:运行应用
  现在将经过测量应用部署到 OracleAS 或 OC4J 中并运行它DMS 将采集时间统计数据
  
  如果您想比较几次运行时间测量结果请多次运行您应用(可能用区别变量变量可以在化 PerformanceMeasurement 对象时放到运行名称中)
  
  第 7 步:在浏览器中查看 DMS 输出
  如果您编写了对 p.writeLogFile 那么您可以查看该日志文件内容它包含原始 DMS 数据
  
  通过在应用服务器上个特定 URL可以找到种更加清晰数据表示思路方法用您 Java 应用使用应用服务器主机名和端口号来替换 [host:port]
  
  对于独立 OC4J使用:http://[host:port]/dms0/Spy
  对于 OracleAS使用:http://[host:port]/dmsoc4j/Spy
  您将看到如下页面:
  
 \">

  正如您所看到DMS\" 还收集 JDBC、JVM 和 OC4J 统计数据并且无需任何进调整有关内置性能量度个列表请参见 Oracle Application Server 10g 性能指南附录 A
  
  要查看某种类别详细信息请单击左边框中名称:
  
\">

  整理总结
  如果您以种结构化方式安装了\" DMS Nouns 和 DMS PhaseEvent Sensors(利用个 PerformanceMeasurement 类)那么利用 DMS您可以容易地测量您 Java 应用性能并且获得性能时间测量结果种易读结构化输出
Tags:  网络性能测量 java性能优化 java性能测试 java性能

延伸阅读

最新评论

发表评论