如何将JProfiler限制为子树

时间:2015-06-29 17:33:44

标签: jprofiler

我有一个名为com.acmesoftware.shared.AbstractDerrivedBean.getDerivedUniqueId()的方法。当我对应用程序进行JProfiler时,这个方法getDerivedUniqueId()基本上被掩埋了80个方法,如预期的那样。代表应用程序中的每个bean调用该方法。我正在尝试将从此方法开始的CPU calltree记录到叶节点(即,排除的类之一)。

我尝试了以下但是没有产生预期的结果:

  1. 在分析目标方法上方找到一种方法,例如markForDeletion()。
  2. 设置触发器以在getDerivedUniqueId()
  3. 开始录制
  4. 在markForDeletion()
  5. 处设置触发器以停止录制

    我原本只希望看到markForDeletion()下面的所有内容,但是我看到了所有内容但不包含getDerivedUniqueId(),这与我的预期目标相反。更糟糕的是,即使采样5ms,此触发器也将之前的运行时间从10分钟增加到“运行3小时后终止”。似乎触发器在开销之上增加了大量的开销。因此,即使我弄清楚如何正确启用触发器,增加的开销似乎也会使其失效。

    我需要将录制限制为此方法的原因是:在5ms采样模式下运行时,应用程序将在10分钟内完成。当我在完整的仪器中运行它时,我已经等了3个小时,但仍然没有完成。因此,我需要在调用getDerivedUniqueId()之后打开完整的检测,并在退出getDerivedUniqueId()时暂停性能分析。

    - 更新/编辑: 感谢Ingo Kegel的帮助。 我可能不清楚如何使用触发器。在下面的代码中,我在代码后面设置了触发器。我的期望是,当我使用以下配置的触发器对应用程序(采样和完整检测)进行JP配置时,如果boolean isCollectMetrics为false,我应该在过滤类中看到100%或99.9%的cpu。但事实并非如此。 CPU树似乎没有考虑触发器。 其次,当isCollectMetrics为true时,我期望的jprofiler调用树将以startProfiling()开头并以stopProfiling()结束。同样,情况也不是这样。

    方法包含()是瓶颈。它最终调用了150个getDerivedUniqueId()中的一个。我试图找出哪个getDerivedUniqueId()导致性能下降。

         public Inventory() { // constructor
         super("DVD1");
         DVD = new DVD[7];
         DVD[0] = new MovieTitle ( "1", " Fast and Furious 6", 10, 15 );
         DVD[1] = new MovieTitle ( "2", " The Matrix Reloaded", 8, 5 );
         DVD[2] = new MovieTitle ( "3", " In Pursuit of Happiness", 8, 5 );
         DVD[3] = new MovieTitle ( "4", " Darknet", 8, 5 );
         DVD[4] = new MovieTitle ( "5", " Goonies", 8, 5 );
         DVD[5] = new MovieTitle ( "6", " zzzz", 8, 5 );
         DVD[6] = new MovieTitle ( "7", " AAaaaa", 15, 19.99 );
     </code>
    

    启用的触发器: enter image description here

    startProfiling触发器: enter image description here

    stopProfiling触发器: enter image description here

    我分别尝试了“开始录制”或“录制CPU”按钮以仅捕获调用树 enter image description here

1 个答案:

答案 0 :(得分:0)

如果检测的开销很大,您应该优化过滤器。使用良好的过滤器,仪表开销可能非常小,

对于触发设置,正确的操作是:

  1. &#34;开始录制&#34;已选择CPU数据
  2. &#34;等待活动结束&#34;
  3. &#34;停止录制&#34;已选择CPU数据