Java 性能、分析和监控工具可以采用以下两种方法之一来获取有关它们检查的应用程序的信息:Java 采样和Java 工具。
有一些重叠——但它们是根本不同的。Java 工具将跟踪给定指标的每个实例,这可能会产生性能问题。Java 采样涉及仅跟踪一个指标样本,因此它对你的应用程序的负载较轻,但并非每个事件都会被捕获。
借助 Java 工具,软件架构师可以将额外的代码或软件组件添加到底层 JVM 或服务器上运行的应用程序的代码中。他们将这些工具添加到他们认为可能是性能问题来源的位置。跟踪对象创建、磁盘延迟或 JDBC 查询完成所需时间长度的工具很常见。
因为仪器被插入到应用程序代码中或嵌入在 JVM 中,所以每次遇到时都会触发它们。如果在高利用率领域使用,Java 插装会生成大量数据并影响性能。由于这种可能性,必须明智地使用仪器。
Java 采样与工具
与工具相反,Java 采样不会为 JVM 上发生的每个操作记录和生成事件。相反,Java 采样工具(例如 Java Flight Recorder)会随机查询系统已跟踪的各种计数器和指标。与 Java 工具不同,采样并不针对 JVM 上发生的每个事件。Java 采样分析器不会记录导致内存泄漏的每个 Java 对象,也不会跟踪执行每个原始类型自动装箱操作所需的时间。相反,只有一小部分由 JVM 或 Java 应用程序执行的操作会被见证和记录。
Java 采样与 JVM 工具相比的主要优势在于,采样对性能的影响要小得多,而且更可预测。Java 采样的缺点是可能会遗漏重要事件,尤其是当分配用于分析 JVM 的时间相对较短时。

Java 工具 API
为确保正确完成 Java 插桩,JDK 提供了一个自定义 Java 插桩 API,允许轻松打开和关闭 JVM 代理,同时将插桩代码保留在应用程序代码之外。从历史上看,尝试编写自己的插桩代码的 Java 开发人员做得很差,这导致的问题比 JVM 插桩代码承诺要解决的问题还要多。Java 工具 API 有助于强制执行编程最佳实践并帮助开发人员避免常见的陷阱。
Java 工具和采样工具
Java Flight Recorder 是事实上的 Java 采样工具,自 Java 8 LTS 发布以来已直接内置到 JVM 中。Flight Recorder 的默认配置非常高效,消耗的资源不到应用服务器的 1%。
对于 Java 工具,VisualVM、JConsole 和托管 bean (MBean) 服务器等平台可以读取和聚合通过 JVM 工具提要提供的事件数据。
Java Mission Control 是一个最初为 JRockit JVM 开发的工具,它结合了可视化显示来自 Java 采样工具(如 Java Flight Recorder)的结果的能力以及从 MBean 服务器报告基于仪表的指标的能力。MBean 服务器的好处是它能够报告来自应用程序服务器(如 Tomcat 或 Jetty)的实时指标,尽管 JFR 数据的实时流最近已添加到 JDK。
Java 采样和 JVM 工具在应用程序监控和性能优化中都发挥着重要作用。最佳实践是 DevOps 团队在优化和调整 JVM 并使用可视化工具(如 Java Mission Control 或 VisualVM)时将这两种方法结合起来,以汇总来自这两种方法的数据。
发表评论 取消回复