JvisualVM 中的采样器和分析器有什么区别?
what's the difference between sampler and profiler in JvisualVM?
我发现JvisualVM中有两个插件,一个是sampler,一个是profiler。
我也发现他们有相似之处UI,但是结果却有很大的不同,那么他们之间的区别是什么意思呢?
为什么它们有很大的不同?
总的来说:
探查器一直处于 运行ning 状态,因此它可以为您提供完整的调用堆栈;在任何给定的时间点。
采样器只在不同的时间点拍摄“快照”。
事实是:当您“剖析”所有内容时,这会显着降低您的 JVM 速度;它会在几秒钟内创建 大量 的数据。想一想:探查器将记下发生的每个 和任何 方法调用!
因此,通常情况下,当您“不知道”您的应用程序中发生了什么时,您最初会使用采样器。然后你只是希望样本能告诉你一些事情;比如“嘿,在我们的 10K 个样本中,我们大部分时间都在使用一种方法,这是为什么?”但是一旦你更好地理解了你在“寻找”什么,你就会尝试做一个完整的分析器 运行 以捕获导致某种方法的整个调用链。
然后是一些“中间地带”——您可以在其中配置“所有”但排除 的东西。换句话说:大多数分析器允许您说“在这个或那个包中 类 中执行 不 分析方法”。但当然 - 排除 packages/hierarchies 只有当你已经非常清楚你打算调查哪个方向时才有意义。
我发现JvisualVM中有两个插件,一个是sampler,一个是profiler。
我也发现他们有相似之处UI,但是结果却有很大的不同,那么他们之间的区别是什么意思呢?
为什么它们有很大的不同?
总的来说:
探查器一直处于 运行ning 状态,因此它可以为您提供完整的调用堆栈;在任何给定的时间点。
采样器只在不同的时间点拍摄“快照”。
事实是:当您“剖析”所有内容时,这会显着降低您的 JVM 速度;它会在几秒钟内创建 大量 的数据。想一想:探查器将记下发生的每个 和任何 方法调用!
因此,通常情况下,当您“不知道”您的应用程序中发生了什么时,您最初会使用采样器。然后你只是希望样本能告诉你一些事情;比如“嘿,在我们的 10K 个样本中,我们大部分时间都在使用一种方法,这是为什么?”但是一旦你更好地理解了你在“寻找”什么,你就会尝试做一个完整的分析器 运行 以捕获导致某种方法的整个调用链。
然后是一些“中间地带”——您可以在其中配置“所有”但排除 的东西。换句话说:大多数分析器允许您说“在这个或那个包中 类 中执行 不 分析方法”。但当然 - 排除 packages/hierarchies 只有当你已经非常清楚你打算调查哪个方向时才有意义。