2011-10-28 23 views
2

我最近發現我編寫的程序出乎意料地很慢,爲了修復它,我想分析它。到目前爲止,我選擇的工具都是Yourkit和hprof,但是我一直無法找到所需的功能。特定軟件包的Scala/Java性能分析

理想情況下,我希望MATLAB Profiler style heat-map適用於我所有的源文件,顏色越深表示在該行中花費的時間越多。我意識到這是很多要問,所以如果它不存在,我不會感到驚訝。

如果以上是不可能的,我希望能夠執行hprof cpu = samples樣式分析,而不是吐出項目中執行的所有類的所有方法的列表,我想以便能夠排除名稱空間(例如:java。,scala.collection。),並且有時間歸因於這些方法被重新分配到堆棧中的最低級別,其中方法在排除的名稱空間中被稱爲NOT。舉例來說,如果我有類似如下的

def sillyMethod: Unit = { 
    0.until(1000000).map{ i => 
     (0 until 1000).toSeq + 1) == (0 until 1000).toSeq + 2) 
    } 
} 

我寧願知道我所有的時間都花在sillyMethod,而不是在Seq.equals。這可能與任何可用的分析器?

編輯:我目前使用sbt執行我的命令和IntelliJ IDEA進行實際編輯。

回答

3

我在很長一段時間沒有看過yourkit,但是如果其分析器無法排除軟件包或限制配置文件包,我會感到驚訝。 JVM實際上附帶了一個並不那麼糟糕的分析器。 jdk包含visualvm。請注意,profiling page的第二個屏幕截圖底部有一個「僅限配置文件類」部分,因此如果您只將您的包放入其中,則不會對其他任何配置文件進行配置,或者您可以更深入地查看特定配置文件包或類。

2

JProfiler有一個調用圖,可以對類和包聚合級別進行操作。

enter image description here

而且,如果您的會話設置指定的頂級包,你不會看到Scala類的任何內部。

enter image description here

免責聲明:我公司開發的JProfiler