Sun Identity Manager 8.1 发行说明

使用 Identity Manager Profiler

Identity Manager 提供了 Profiler 实用程序,可以帮助您解决部署中遇到的表单、Java、规则、工作流以及 XPRESS 方面的性能问题。

表单、Java、规则、工作流以及 XPRESS 都会造成性能和伸缩问题。Profiler 将会分析这些不同区域所消耗的时间,从而可以确定这些表单、Java、规则、工作流或 XPRESS 对象是否产生了性能和伸缩问题,如果出现问题,将会进一步确定这些对象的哪些部分出现了问题。

本节将介绍如何使用 Identity Manager Profiler,并提供了一个教程,帮助您了解如何解决部署中存在的性能问题。

该信息分为以下几个主题:


注 –

仅在 7.1 Update 1 和更高版本上支持 Identity Manager Profiler。


概述

本节提供了 Identity Manager Profiler 功能的概述。信息通过以下方式进行组织:

主要功能

可以使用 Profiler 实用程序来执行以下操作

Profiler 查找和管理源的方式

本节介绍了 Profiler 如何查找和管理以下 Identity Manager 对象的源:


提示 –

在“调用树”视图或“热点”视图中,可以双击任何与 Java 方法、工作流、表单、规则或 XPRESS 对应的节点,以查看该节点的源。


对于表单、规则、工作流和 XPRESS 对象

在使用 Profiler 拍摄快照时,服务器会评估所有的性能分析数据并发现该数据所依赖的源。然后,服务器将从系统信息库中获取所有这些源,并将它们包含在快照中。因此,您可以确信显示在快照中的 Identity Manager 对象会准确地反映捕捉到该快照的那一刻的情况。

此过程会增加快照的大小,但相对来说,源大小实际上只是总大小的一小部分。因此,您可以将快照发送到 Sun 的客户支持部门,而不必单独发送源文件。

对于 Java 源

在拍摄 Java 源的快照时,客户机将下载该快照,然后仔细查看快照以便从项目中捕获所有引用的 Java 源。在保存快照时,客户机将压缩这些源并将其附加到快照的结尾处。

然后,在您查看快照并转至 Java 源时,客户机将首先检查快照的内容。如果客户机在该处找不到快照内容,则会检查项目的内容。此过程允许您发送包含性能分析数据(来自自定义 Java 代码和 Identity Manager 代码)的快照。


注 –

在 Java 源快照中,不能假定源相对于服务器而言是最新的或始终可用。


统计信息注意事项

以下各节包含评估 Profiler 提供的结果时要考虑的信息:

自用时间统计

要计算根节点的自用时间,Profiler 将从根节点的总时间中减去所有子节点的时间。

因此,未分析的子节点的时间会反映在根节点的自用时间中。如果根节点的自用时间很长,则应该查明原因。您可能没有分析适当的方法,因此导致您处理的位置不当。

例如,假设方法 A 调用方法 B。

方法 A 总耗时为 10 秒(这里总时间包括调用方法 B 的时间),并且调用方法 B 总耗时也为 10 秒。

如果分析了方法 A 和 B,则调用栈会反映出该信息。您将看到,方法 A 的自用时间为 0秒,而方法 B 的自用时间为 10 秒(这 10 秒实际上是在方法 B 中花费的)。但是如果未分析方法 B,则只会看到调用方法 A 耗时 10 秒,并且 A 的自用时间为 10 秒。因此,您可能认为问题就是出在方法 A 中,而不是方法 B 中。

需特别指出的是,您在最初编译 JSP 期间,会注意到 JSP 的自用时间很长。如果您重置收集的结果,然后再重新显示该页,则自用时间将会显著减少。

构造函数调用

因为 Java 分析策略中存在某些限制,所以 this()super() 的初始调用将显示为构造函数调用的同级调用,而不是子级调用。请参见以下示例:


class A
{
   public A()
   {
      this(0);
   }
   public A(int i)
   {
   }
}

and:

class B
{
   public static void test()
   {
      new A();
   }
}
The call tree will look like this:
B.test()
   -A.<init>(int)
   -A.<init>()
Rather than this:
B.test()
   -A.<init>()
      -A.<init>(int)

守护线程

不要被表面上许多 Identity Manager 守护线程(如 ReconTask.WorkerThread.run()TaskThread.WorkerThread.run())所耗费的大量时间所误导。其中大部分时间是在休眠(等待事件)中度过的。必须仔细研究这些情况,以了解这些线程在处理事件时实际使用的时间。

入门

本节对如何启动 Profiler 以及如何使用 Profiler 图形用户界面的各种功能进行了介绍。此信息分为以下几个部分:

准备工作

由于 Profiler 将耗费巨大的内存,因此您应该显著增加服务器和 Netbeans Java 虚拟机 (Java Virtual Machine, JVM) 的内存。

    增加服务器的内存:

  1. 打开 Netbeans 窗口,然后选择“运行时”选项卡。

  2. 展开“服务器”节点,右键单击“捆绑的 Tomcat”,然后从菜单中选择“属性”。

  3. 当显示“服务器管理器”对话框时,清除“连接”选项卡上的“启用 HTTP 监视器”复选框。

  4. 选择“平台”选项卡,将“VM 选项”设置为 -Xmx1024M,然后单击“关闭”。

    增加 Netbeans JVM 的内存:

  1. 打开 netbeans-installation-dir \etc\netbeans.conff 文件,并找到以下行:

    netbeans_default_options="-J-Xms32m -J-Xmx ...

  2. -J-Xmx 值更改为 -J-Xmx 1024M

  3. 保存并关闭该文件。

完成后,可以按下一节中所述的方法启动 Profiler。

启动 Profiler

可以使用以下任意方法从 Identity Manager IDE 窗口中启动 Profiler:


注 –

当主 Identity Manager 项目是 7.1 Update 1 版本或更高版本时,“在主项目上启动 Identity Manager Profiler”图标将处于启用状态。


启动 Profiler 时,会显示“Profiler 选项”对话框,您可以指定要使用的性能分析选项。指定 Profiler 选项中提供了设置这些选项的说明。

使用 Profiler

本节介绍了 Profiler 图形用户界面的功能以及如何使用这些功能。信息通过以下方式进行组织:

指定 Profiler 选项

“Profiler 选项”对话框由以下选项卡组成:

使用这些选项卡上的选项,可指明要对哪些对象进行性能分析,以及要显示在性能分析中的元素。

指定 Profiler 选项后,单击“确定”可启动 Profiler。根据项目配置,Profiler 将执行以下两项操作之一:


注 –

可以选择 "IdM" ->“设置 Identity Manager 实例”来控制用于该项目的 Identity Manager 实例操作。


模式

“模式”选项卡提供了以下选项:

IDM 对象过滤器

“IDM 对象过滤器”选项卡提供了以下选项:

Java 过滤器

选择“Java 过滤器”选项卡可以执行以下操作:

Java 过滤器以方法模式的形式提供,它们采用根据规范的方法名称执行包含或排除操作的模式来表示。其中,规范的方法名称为:

fully-qualified-class-name.method-name( parameter-type-1, parameter-type-2, ... )


注 –

对于构造函数,method-name<init>


下面列举了一些示例:


注 –

最后两个示例目前是等效的,因为这些过滤器仅会应用于自定义类和 Identity Manager 类。


如有必要,可以通过适当修改 build.xml 中的以下行来分析其他 JAR。例如,


<instrument todir="${lighthouse-dir-profiler}/WEB-INF" 
verbose="${instrumentor.verbose}" includeMethods="${profiler.includes}" 
excludeMethods="${profiler.excludes}">
           <fileset dir="${lighthouse-dir}/WEB-INF">
               <include name="lib/idm*.jar"/>
               <include name="classes/**/*.class"/>
           </fileset>
</instrument>

默认情况下,该配置包含所有自定义类和大多数 Identity Manager 类。强制排除了一些 Identity Manager 类,这是因为启用这些类会中断 Profiler 的运行。

例如,会排除工作流、表单和 XPRESS 引擎中的类,否则在分析 Java 和 Identity Manager 对象时,Profiler 将会生成难以理解的快照。

请注意,Java 过滤器将提供比 IDM 对象过滤器更细的过滤粒度。因此,使用 Java 分析会显著增加执行时间的开销,从而使性能分析结果出现巨大的偏差。由于是解释而非编译 Identity Manager 对象,因此分析开销可以忽略不计。因此,举例来说,根本没有理由排除工作流 A 而包含工作流 B,等等。


注 –

在运行 Profiler 时,不能修改 Java 过滤器。必须先停止 Profiler 才能更改 Java 过滤器。


其他

“其他”选项卡提供了以下选项:

使用 "IDM Profiler" 视图

IDM Profiler 视图由以下区域组成:

“当前项目”区域

“当前项目”区域包含一个下拉菜单,该菜单列出了所有的当前项目。使用此菜单可以选择要分析的项目。

控制区域

“控制”区域包含四个图标,如下表中所述:

图标 

名称 

用途 

显示“启动 Identity Manager Profiler”图标的图形

启动 Identity Manager Profiler 

启动 Profiler 并打开“Profiler 选项”对话框。 

显示“停止 Identity Manager Profiler”图标的图形

停止 Identity Manager Profiler 

停止 Profiler。 

显示“重置收集的结果”图标的图形

重置收集的结果 

重置截止到此刻您收集的所有分析结果。 

显示“修改性能分析”图标的图形

修改性能分析 

重新打开“Profiler 选项”对话框,以便您可以更改任何设置来修改当前的分析结果。 

“状态”区域

“状态”区域会报告您是否与主机进行了连接,并提供有关 Profiler 启动、运行和停止的状态信息。

“性能分析结果”区域

“性能分析结果”区域包含两个图标,如下表中所述:

图标 

名称 

用途 

显示“启动 Identity Manager Profiler”图标的图形

启动 Identity Manager Profiler 

启动 Profiler 并打开“Profiler 选项”对话框。 

显示“重置收集的结果”图标的图形

重置收集的结果 

重置截止到此刻您收集的所有分析结果。 

“已保存的快照”区域

“已保存的快照”区域提供了所有已保存快照的列表。


注 –

保存快照中提供了保存快照的说明。


此外,还可以使用以下按钮来管理这些快照:

使用“快照视图”

打开快照时,结果会显示在位于 Identity Manager IDE 右上方的“快照视图”窗口中。

快照提供了几种数据视图,将在以下各节中进行介绍:

“调用树”视图

“调用树”视图由一个树表组成,该树表显示了整个系统的调用计时和调用计数。

此树表包含三列:

“热点”视图

“热点”视图提供了节点的平面化列表,用于显示汇总调用计时(不考虑父节点)。

此视图包含以下列:

“反向跟踪”视图

“反向跟踪”视图提供了反向的调用栈,显示了从中调用每个节点的所有调用链。

可以使用这些统计信息来回答如下问题:如果我删除自此节点开始的特定调用链,将节省多少时间?

可以从其他任何快照视图中访问“反向跟踪”视图,方法是右键单击某个节点(称为根节点),然后从弹出式菜单中选择“显示反向跟踪”。


注 –

“时间”和“调用次数”数据值在“反向跟踪”视图中具有某些不同的含义:


“被调用者”视图

“被调用者”视图提供了节点(称为根节点)的汇总调用树(不考虑其父调用链)。

如果存在一个问题区域,并且整个主调用树中的许多位置都调用了该区域,当您想查看该节点的整体性能分析时,这些统计信息将非常有用。

可以从其他任何快照视图中访问“被调用者”视图,方法是右键单击某个节点(称为根节点),然后从弹出式菜单中选择“显示被调用者”。


注 –

“被调用者”视图中所用的时间和调用次数数据值与那些在“调用树”视图中使用的数据值具有相同的含义。


使用弹出式菜单选项

右键单击“调用树”视图或“热点”视图中的任意节点,将显示一个弹出式菜单,其中的选项如下表中所述:

菜单选项 

描述 

转至源 

选择此选项可以查看 Java 方法、工作流、表单、规则或 XPRESS 所对应节点的 XML 源。有关此视图的详细信息,请参见 Profiler 查找和管理源的方式

显示反向跟踪 

选择此选项可以访问“反向跟踪”视图。有关此视图的详细信息,请参见“反向跟踪”视图

显示被调用者 

选择此选项可以访问“被调用者”视图。有关此视图的详细信息,请参见“被调用者”视图

在“热点”视图中查找 

选择此选项可以在“热点”视图中查找节点。有关此视图的详细信息,请参见“热点”视图

“列表选项”->“排序”-> 

选择此选项可以看到以下选项 

  • 调用树

  • 时间

  • 调用次数

  • 升序

  • 降序

“列表选项”->“更改可视列” 

选择此选项可以更改在“调用树”或“热点”列表中显示的列。 

当显示“更改可视列”对话框时,您可以选择以下一个或多个选项: 

  • 调用树:调用树

  • 调用次数:调用次数

  • 时间:时间

搜索快照

使用位于“快照视图”窗口顶部的“搜索”图标显示“搜索”图标的图形 ,可以在“调用树”视图或“热点”树中按名称来搜索节点。

此外,还可以右键单击“调用树”视图或“热点”视图中的任意节点,然后从弹出式菜单中分别选择“在‘调用树’视图中查找”或“在‘热点’视图中查找”来搜索节点。

保存快照

Profiler 提供了几个选项来保存快照。有关这些选项的描述,请参见下表:

图标 

名称 

用途 

显示“启动 Identity Manager Profiler”图标的图形

“在项目中保存快照”图标(位于“快照视图”窗口的顶部) 

在项目的 nbproject/private/idm-profiler 目录中保存快照。Profiler 视图的“已保存的快照”部分会列出在项目中保存的快照。

显示“停止 Identity Manager Profiler”图标的图形

“在外部保存快照”图标(位于“快照视图”窗口的顶部) 

将快照保存到外部的任意位置。 

显示“重置收集的结果”图标的图形

“另存为”按钮(位于“已保存的快照”区域中) 

将快照保存到外部的任意位置。 

教程:性能问题疑难解答

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> 查看源。