【问题标题】:Measure execution time of Java with JVMTI使用 JVMTI 测量 Java 的执行时间
【发布时间】:2011-05-11 10:42:04
【问题描述】:

对于我使用JVMTI 实现的分析器,我想开始测量所有Java 方法的执行时间。 JVMTI 提供事件:

  • MethodEntry
  • MethodExit

所以这很容易实现,但是我在 API 中遇到了这个note

启用方法进入或退出事件会显着降低许多平台上的性能,因此不建议用于性能关键的用途(例如分析)。在这些情况下应使用字节码检测。

但是我的分析代理无头工作,这意味着收集的数据被序列化并通过套接字发送到显示结果的服务器应用程序。我应该如何使用字节码检测来实现这一点。我有点困惑如何从这里继续。如果我必须改变策略或者我该如何解决这个问题,有人可以向我解释一下吗?

【问题讨论】:

  • 听起来您想创建自己的分析器。我建议你看看现有的配置文件是如何工作的,比如 VisualVM 和 YourKit,看看它们是否不能满足你的需求。
  • 他们愿意,我只想自己做。但是 VisualVM 可能是一个提示,看看他们是如何做到的,但我有根据的猜测是他们使用 Java 代理而不是本机代理。
  • VisualVM 使用 Java 代理,您可以获取其源代码。 YourKit 使用您无法获取源代码的本地代理。记录数据并不像正确可视化数据那么难。我会看看 YourKit 是如何进行可视化的。
  • 下一步是可视化,我的意思是我可以使用命名的 JVMTI 事件 MethodEntry 和 MethodExit 来看看,如果没有检测,差异有多大,但是,我仍然想这样做正确的方法。到目前为止,我看不到如何使用类方法来收集数据并将这些数据发送到套接字,就像我现在在本机代码中一样。
  • 我认为你会遇到很多麻烦,因为它可能不如专业的解决方案,但是......当你创建一个代理时,你可以定义一个@987654325 @ 传递了一个 Instrumentation ,它获取加载的每个类的所有字节码。它也可以用于稍后重新加载类。您可以使用 ObjectWeb ASM 之类的库来更改要插入的字节码,以用于方法、字段等(任何您喜欢的)的计时器/计数器代码,并将其存储在 POJO 数据结构中,您可以通过普通 Socket 发送该数据结构。跨度>

标签: java measurement execution-time jvmti


【解决方案1】:

我不了解 Sun JVM,但是当您请求 MethodEntry/Exit 事件时,IBM JVM 会进入我们所说的 FullSpeedDebug 模式...... FSD 会大大减慢执行速度。

正如您所说,您可以像我的探查器那样使用 BCI,但除非您选择检测哪些方法,否则您也会看到速度变慢。例如,我的分析器在每个条目上插入一个 if(profiling) callProfilerHook(),并在所有对象创建的方法中以及其他一些区域中的所有可能的退出中插入一个...。这些额外的检查可能会使执行速度减慢 50% 以上。 ..

至于如何进行 BCI...好吧,我编写了自己的 C 库来执行此操作...从技术上讲并不难(提示只需删除 StackMapTable),但我可能需要您一段时间...或者您可以使用 ASM et .人。

最后...您调用BackHook 将增加开销,并且在小方法上呈现报告的 CPU/时钟时间毫无意义,除非您执行一些复杂的开销计算...即使您这样做,您的回调代码也会影响处理器 L1 缓存的形状并且 Java 代码变得不那么高效,因为它有更少的空间..

我的分析器基本上忽略了报告的时间,因为我以一种有趣的方式可视化了执行...我希望了解所有代码的流程,实际上在大多数情况下运行的是什么代码(大多数 Java 项目都有不知道在他们的应用程序中运行的数百万行第三方代码)

【讨论】:

  • 嘿,再次感谢您在 stackoverflow 上的另一个问题中给我的建议,它真的让我的项目顺利进行。我真的很喜欢你的论点,我认为这是我会抓住的一点。因为我想衡量花费最多时间的地方,而不是一个方法究竟需要多长时间。所以你可以说,MethodEntry 和 MethodExit 仍然可用吗?顺便说一句,我的项目现在可以在:github.com/platzhirsch/Profiling-Concurrency
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 2011-02-16
相关资源
最近更新 更多