Sun Identity Manager 8.1 发行说明

教程:性能问题疑难解答

Identity Manager 提供了一个教程 (profiler-tutorial.zip),可以帮助您了解如何使用 Profiler 来解决表单、Java 规则、工作流和 XPRESS 存在的问题。

可以使用以下步骤完成本教程。

Procedure步骤 1:创建 Identity Manager 项目

  1. 选择“文件”->“新建项目”。

  2. 当显示“新建项目”向导时,指定以下内容,然后单击“下一步”:

    1. 在“类别”列表中,选择 "Web" 以指明要创建的项目的类型。

    2. 在“项目”列表中,选择“Identity Manager 项目”。


      注 –

      必须创建一个适用于功能完备的开发环境的常规 Identity Manager 项目。不要选择“Identity Manager 项目(远程)”选项。


  3. 填充“名称和位置”面板上的以下字段,然后单击“下一步”:

    • 项目名称:输入 Idm80 作为项目名称。

    • 项目位置:使用默认位置或指定其他位置。

    • 项目文件夹:使用默认文件夹或指定其他文件夹。

  4. 当显示“Identity Manager WAR 文件位置”面板时,输入 Identity Manager 8.1 war 文件的位置。通常,解压缩此文件可在相同目录中创建一个 idm.war 文件。

  5. 单击“下一步”转至“系统信息库设置”面板。

    无需更改此面板上的默认设置,直接单击“完成”即可。当看到“生成成功”消息显示在“Identity Manager IDE 输出”窗口中时,就可以提取 Profiler 教程文件了。有关说明,请参见第 2 步:解压缩 Profiler 教程

Procedure第 2 步:解压缩 Profiler 教程

  1. 在项目根目录中解压缩 profiler-tutorial.zip。提取的文件包括:

    <project root>/custom/WEB-INF/config/ProfilerTutorial1.xml
    <project root>/custom/WEB-INF/config/ProfilerTutorial2.xml
    <project root>/src/org/example/ProfilerTutorialExample.java
    <project root>/PROFILER_TUTORIAL_README.txt
  2. 启动 Profiler。继续执行第 3 步:启动 Profiler

Procedure第 3 步:启动 Profiler

  1. 按照准备工作中提供的说明增加服务器和 Netbeans JVM 的内存。

  2. 使用概述中介绍的任一方法启动 Profiler。

  3. 当显示“Profiler 选项”对话框时,可以指定性能分析选项。

  4. 继续执行第 4 步:设置 Profiler 选项


    注 –

    有关所有不同 Profiler 选项的详细信息,请参见指定 Profiler 选项


Procedure第 4 步:设置 Profiler 选项

为实现本教程的教学目的,请指定以下 Profiler 选项:

  1. 在“模式”选项卡上,选择“Java 和 IDM 对象”以分析表单、Java、规则、工作流及 XPRESS 对象。

  2. 选择“Java 过滤器”选项卡。

    使用以下步骤禁用自定义 Java 类(本例中为 org.example.ProfilerTutorialExample)以外的所有 Identity Manager Java 类:

    1. 单击“新建”,一个新的空白字段将显示在“过滤器”列的底部。

    2. 在新字段中输入 com.waveset.*,然后选中“排除”复选框。

    3. 再次单击“新建”。

    4. 在新字段中输入 com.sun.idm.*,然后选中“排除”复选框。

  3. 单击“确定”以运行 Profiler。


    注 –

    如果您是第一次对某个项目运行 Profiler,或在近期执行了“清理项目”操作,则 Profiler 将需要几分钟时间来完成处理。


    Profiler 完成处理后,系统会提示您登录。

  4. 输入密码 configurator,选中“记住密码”复选框,然后单击“确定”以继续。

  5. 当显示 Identity Manager 窗口时,请登录。


    注 –

    通常,您应以其他的用户身份登录到 Identity Manager,而不是再以 configurator 身份登录。您已经以 configurator 身份登录到 Profiler,Identity Manager 会话池仅允许一个用户具有一个条目。使用多个条目会导致会话池中断,并且可能造成性能分析结果出现偏差,出现更细化的性能问题。

    但是,对于此简单示例,会话池没有出现任何问题,因此您可以使用 configurator/configurator 登录。


  6. 在 Identity Manager 中,选择“服务器任务”->“运行任务”,然后单击 "ProfilerTutorialWorkflow1"。

    此教程可能需要一些时间进行响应。

  7. 尽管您现在可以拍摄快照,但您最好先重置结果、运行 Profiler、再次运行 Profiler,然后再拍摄快照。


    注 –

    最佳的做法是在拍摄快照之前运行几次 Profiler,以确保预备好所有缓存、编译好所有 JSP 等等。

    通过运行几次 Profiler,您可以重点解决实际的性能问题。不适合应用此做法的唯一一种例外情况是:存在自动填充缓存方面的问题。


    1. 返回到 Identity Manager IDE 中的 "IDM Profiler" 视图。单击“性能分析结果”部分(或“控制”部分)中的“重置收集的结果”图标,以重置到目前为止收集的所有结果。

    2. 在 Identity Manager 中,再次选择“服务器任务”->“运行任务”,然后单击 "ProfilerTutorialWorkflow1"。

    3. 当显示“进程图”时,返回到 Identity Manager IDE,然后单击“性能分析结果”部分中的“拍摄快照”。

  8. Identity Manager IDE 会下载您的快照,并在窗口的右侧显示结果。

    此区域为“调用树”视图。在“调用树”的顶部,可以看到 /idm/task/taskLaunch.jsp 及其“时间”列中列出的时间。该时间应该表示整个请求耗时六秒以上。

  9. 展开 /idm/task/taskLaunch.jsp 节点,会看到 ProfilerTutorialWorkflow1 耗时六秒。

  10. 展开 ProfilerTutorialWorkflow1 节点。请注意,activity2 耗时四秒,activity1 耗时两秒。

  11. 展开 activity2

    请注意,action1 耗时两秒,action2 耗时两秒。

  12. 展开 action1,请注意,<invoke> 也耗时两秒。

  13. 双击 <invoke> 以打开 ProfilerTutorialWorkflow1.xml,并突出显示以下行:


    <invoke name=’example’ class=’org.example.ProfilerTutorialExample’/>

    您应看到调用 ProfilerTutorialExample 方法耗时两秒。


    注 –

    实际上,您浏览的是快照中捕获的 XML 源,而不是项目中的源。快照是完全自包含的。(有关详细信息,请参见 Profiler 查找和管理源的方式。)


  14. 选择 "CPU:<date>< time>" 选项卡以返回到您的快照。

  15. 展开 <invoke> 节点,请注意,Profiler 在 Java ProfilerTutorialExample.example() 方法中耗时两秒。

  16. 双击该方法的名称以打开 ProfilerTutorialExample.java 源,并突出显示以下行:


    Thread.sleep(2000);

    存在问题!此方法包含一个两秒的线程休眠。

  17. 如果返回到“调用树”,则可以看到所有耗时两秒的路径都通向此方法。(您应看到三个路径,共耗时六秒。)

  18. 选择“热点”选项卡(位于“调用树”区域的底部)以打开“热点”视图。请注意,ProfilerTutorialExample.example() 的自用时间总计为六秒。

    (有关“热点”的详细信息,请参见使用“快照视图”。)

  19. 右键单击 ProfilerTutorialExample.example(),然后从弹出式菜单中选择“显示反向跟踪”。

    将在该区域的底部显示一个新的“反向跟踪”选项卡。

  20. 展开“反向跟踪”选项卡上的 ProfilerTutorialExample.example() 节点,会看到从三个位置调用了此方法,并且从每个位置调用此方法时都耗时两秒。

    (有关“反向跟踪”的详细信息,请参见使用“快照视图”。)

  21. 单击“在项目中保存快照”图标以保存您的快照,然后将其关闭。

    如果查看 "IDM Profiler" 选项卡上的“已保存的快照”部分,则会看到快照。(您可能需要向下滚动才能看到。)

  22. 选择已保存的快照,然后单击“打开”以重新打开该快照。


    注 –

    可以使用“另存为”按钮在外部位置保存您的快照,并可使用“加载”按钮加载位于项目外部的快照。


  23. 再次关闭该快照。

Procedure第 5 步:分析 ManualAction 工作流

本教程的下一部分将说明如何分析工作流 ManualAction。

  1. 在 Identity Manager 中,选择“服务器任务”->“运行任务”,然后单击 "ProfilerTutorialWorkflow2"。

    稍等片刻,将会显示一个空表单。

  2. 单击“保存”,将会显示进程图。

  3. 再次选择“服务器任务”->“运行任务”。

  4. 返回到 Identity Manager IDE 的 "IDM Profiler" 视图,然后单击“性能分析结果”部分中的“重置收集的结果”图标。

  5. 现在,单击 Identity Manager 中的 "ProfilerTutorialWorkflow2"。

  6. 当再次显示空表单时,单击“保存”。

  7. 在 "IDM Profiler" 视图中,单击“拍摄快照”。

    几秒钟后,快照会显示在“调用树”区域中。您应看到 /idm/task/workItemEdit.jsp 耗时六秒以上。(此结果对应于工作流中的手动操作。)

  8. 展开 /idm/task/workItemEdit.jsp 节点,请注意,运行 ManualAction 表单中的所有派生共耗时六秒。

  9. 展开 DerivationdisplayNameFormvariables.dummy<block> 节点。

    您应看到 <block> 耗时六秒,其中 Profiler 在三次调用 ProfilerTutorialExample.example() 方法时各耗时两秒。

  10. 可以双击 <block> 查看源。