JvisualVM中的采样器和分析器有什么区别?

43

我发现JvisualVM中有两个插件,一个是sampler,另一个是profiler。

我还发现它们的用户界面相似,但结果有很大的差异,那么它们之间的区别是什么意思呢?

为什么它们会有很大的差异呢?

1个回答

72

通常:

性能分析器(profiler)一直运行,因此它可以给你完整的调用栈;在任何时刻。

采样器(sampler)只在不同的时间点上“抽样”。

问题在于:当你“分析”所有内容时,会显著减慢JVM速度,并在短短几秒钟内创建大量数据。想想看:性能分析器将记录下每个方法调用!

因此,通常情况下,当你对应用程序内部发生的情况“一无所知”时,最初使用采样器。然后你只是希望这些样本告诉你一些东西,例如:“嘿,在我们的10K个样本中,我们大多数时间都在执行某个特定的方法,为什么?”,但是一旦你对自己正在“追踪”的内容有了更好的了解,就会尝试使用完整的性能分析器来捕获导致某个方法调用的完整调用链。

还有一些“折中办法” - 在这种情况下,你“分析”所有内容,但是要排除某些内容。换句话说:大多数性能分析器允许你说“不要分析这个或那个包中类的方法”。但是当你已经对要调查的方向有了相当好的了解时,排除特定的包/类才有意义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接