Sun Identity Manager 8.1 发行说明

统计信息注意事项

以下各节包含评估 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())所耗费的大量时间所误导。其中大部分时间是在休眠(等待事件)中度过的。必须仔细研究这些情况,以了解这些线程在处理事件时实际使用的时间。