Java SE Embedded 8 中的 Java Flight Recorder 和 Oracle Java Mission Control
简介
Java Mission Control (JMC)
Oracle Java Mission Control (JMC) 是一组功能强大的工具,可以在 Oracle JDK 上运行并与 Oracle Java SE Embedded 8 虚拟机 (VM) 进行交互。这组工具可为 Java SE Embedded 8 VM 提供先进、无干扰的 Java 监视和管理,适用于开发和生产环境。本文介绍 Java Mission Control,描述了工具链中的主要组件、其组件与其他竞争技术之间的区别以及如何使用 Java Mission Control 监视、管理、分析和诊断 Java SE Embedded 8 小型设备平台上运行的应用。
Java Flight Recorder (JFR)
Java Flight Recorder (JFR) 是一个按需“飞行记录器”,可以生成有关 Java SE Embedded 8 VM 及其正在运行的嵌入式应用的详细记录。请注意,JFR 适用于 Java SE Embedded 8 完整 JRE,而不适用于紧凑 Profile。可以使用 Java Mission Control 中的 Flight Recorder 工具离线分析记录的数据。数据包括执行配置文件、垃圾回收统计信息、优化决策、对象分配、堆统计信息以及针对锁和 I/O 的延迟事件。
Java SE Embedded 8 平台上的 JMC 和 JFR 首次允许在 Java SE 嵌入式设备上进行数据收集和数据分析,而不仅限于运行 Oracle JDK 的台式机或服务器计算机。Java Flight Recorder 和 Java Mission Control 还支持在小型嵌入式设备上的 Java SE Embedded 8 中进行远程调试和分析。本文提供了在 Java SE Embedded 8 VM 上运行时的一些提示和技巧,以便考虑到嵌入式环境的一些适当因素,例如动态内存较少、CPU 较弱以及存储空间较少。
Java Mission Control (JMC) 工具链与 Java SE Embedded 8 交互
目前用于监视、管理和分析 Java 桌面或服务器运行时的大多数技术都采用了一些侵入性技术,例如字节码检测和 JVMTI。Java SE Embedded 8 设备平台上的 Java Mission Control (JMC) 主要用于收集必要的数据,尽可能减少对正在运行的系统的影响,同时允许在嵌入式设备上收集数据。所采用的技术还支持应用在工具与 Java SE Embedded VM 断开连接后全速运行。这使得 JMC 适合在嵌入式设备的生产环境中使用,由于 CPU 较弱,因此对运行速度的影响更为明显。JMC 能够将开销降至较低水平并尽可能减少观察者的影响,为您的嵌入式应用提供比其他常用解决方案更为准确的数据。
连接到 JMC 的开发或生产 Java SE Embedded 8 设备上的数据流如下所示:

从上面的图 1 可以看出,JMC 在开发人员/系统管理员机器上启动,将与在开发或生产 Java SE Embedded 8 小型设备上的本地 Java SE Embedded 8 进程中运行的 JMX 代理进行通信。这就允许 JMX 控制台与小型嵌入式设备上运行的 Java SE Embedded 8 VM 进行交互,并将其测量值用于以后的数据分析。
Java SE Embedded 8 上的 Java Flight Recorder (JFR)
使用 Java Flight Recorder,系统管理员和开发人员可以采用一种全新的方式诊断运行 Java SE Embedded 8 的嵌入式设备中的生产问题。使用 JFR 可以从 Java SE Embedded 8 应用(操作系统层)、Java SE Embedded 8 VM 以及 Java SE Embedded 应用收集事件。收集的事件包括线程延迟事件,例如睡眠、等待、锁争用、I/O、GC 和方法分析。由于性能影响较低,一般不到大多数 Java SE Embedded 应用的 2%,因此在收集数据和事件时,可以默认启用 JFR,并在生产环境中持续收集 Java 应用中的低级数据。当发生生产问题时,这将为系统管理员和开发人员提供更快的周转速度。这是将持续收集的 JFR 数据写入磁盘,然后对从产生问题的应用中收集的数据进行分析,而不是事后数据收集。
针对嵌入式设备的数据分析
Java Flight Recorder 不会立即将发生的事件写入嵌入式设备存储空间。而是将数据存储在内存中缓冲区的层次结构中,然后当缓冲区满时再将数据移至存储空间。最开始,JFR 运行时将事件数据存储在线程本地缓冲区中,无需为每个事件同步线程,从而大幅提高吞吐量。当线程本地缓冲区填满后,数据就会被传输至全局缓冲区。发生这种情况时,线程间需要进行同步,但由于不同线程本地缓冲区的填充速度不同,因此很少会发生争用。最终,全局缓冲区也会空间不足,缓冲区中的内容会被写入磁盘。写入磁盘非常占用资源,但 JFR 可确保尽可能高效地完成这一过程。生成的文件采用二进制格式,占用空间非常少,同时确保应用能够高效地读取和写入它们。
您可以配置 JFR 不将任何数据写入嵌入式设备存储区域。这是在 Java SE Embedded 设备上运行 JFR 时的最佳模式,因为在此模式中,全局缓冲区将充当循环缓冲区,当缓冲区填满时,最早的数据会被删除。即使采用这种开销极低的操作模式,用户仍然能够收集到根源问题分析所需的一切重要数据。由于新数据始终位于全局缓冲区中,因此当操作或监控系统检测到问题时,随时可以根据需要将其写入存储空间。当存储空间非常宝贵时,比如在运行 Java SE Embedded 8 的小型设备上,这是一种理想的方案。
Java SE Embedded 8 上的 JMC 和 JFR 快速入门
要开始在 Java SE Embedded 8 设备上运行 JMC 和 JFR,请参阅以下链接:
1.在运行完整 Oracle JDK 的系统管理员计算机上设置 JMC:
http://www.oracle.com/technetwork/cn/java/javaseproducts/mission-control/index.html 2.使用这些 JFR 选项标志设置 Java SE Embedded 8 VM:
https://docs.oracle.com/javacomponents/jmc-5-4/jfr-runtime-guide/about.htm#CHDHFFGE 3.使用 JMX 控制台控制和分析您的 Java SE Embedded 8 进程:
https://docs.oracle.com/javacomponents/jmc-5-4/jfr-runtime-guide/run.htm#CHDIDCHG 总结
Java Mission Control 是一个功能丰富的工具套件,可用于监视、管理、诊断和分析运行 JFR 的 Java SE Embedded 8 应用。您可以在嵌入式生产环境中安心地使用 Java Mission Control,使用后不会在系统中留下任何痕迹,并且使用时的性能开销也比同类工具要小得多,这对于资源受限的 Java SE 嵌入式设备尤为重要。在您自己的 Java SE Embedded 8 平台上尝试一下,看看它如何为嵌入式开发提供帮助!
有关更多信息,请访问以下链接:
http://www.oracle.com/technetwork/cn/java/javaseproducts/mission-control/index.html http://docs.oracle.com/javase/8/docs/technotes/guides/jfr/