Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

InfoQ Homepage News JDK Mission Control 8 Released

JDK Mission Control 8 Released

This item in japanese

Lire ce contenu en français


JDK Mission Control (JMC) is best known as the dashboarding solution used to analyze the data collected by JDK Flight Recorder (JFR), the built-in profiling and event collection framework of the JDK. Binary releases for JMC 8 are now available for download via AdoptOpenJDK and Oracle. JMC 8 offers more insights into applications by introducing new graphs and heap dump analysis by default.

Built on top of the Eclipse IDE, JMC can be installed as standalone or as an Eclipse plugin. JMC is the successor of JRockit Mission Control, created by Appeal Virtual Machines before Oracle acquired the company in 2008. JMC is a (production) profiling and diagnostics tool and may also be used as a library for parsing and processing .jfr files.

The JMC application provides an overview of all locally running Java processes. As shown below, right-clicking on one of the running Java applications displays the available options in the dropdown menu. The JMX Console is used to continuously monitor an environment, interact with MBeans or invoke jcmd diagnostics commands on a remote machine. Flight Recording and Dump Heap may be used to create a recording and a heap dump, respectively, for further analysis.

JFR is a command-line tool that previously required a license fee for production environments. However, it has been freely available since OpenJDK 8u272. The resulting data is stored as a .jfr file. It’s also possible to click on "Start Flight Recording" from the JMC application. The Flight Recording wizard displays a list of recording types and events to collect.

The main feature of JFR is that it can be used with low overhead in production environments. About two to four MB of data is stored per minute for about 100 thousand events during the recording, including many stack traces. The overhead of JFR depends on the selected measurements. With default settings, it’s less than two percent.

JOverflow, an optional plugin that offers advanced analysis of heap dumps, is now included by default in JMC 8. For this release, the plugin was converted to the Standard Widget Toolkit (SWT). JOverflow also offers insights into the Java heap and assists developers in optimizing the heap. To get started, create and open a heap dump in the JMC application. JOverflow features, such as the Hierarchical Treemap, may be used to improve the heap usage of the application.

The Flame View is improved and available with the standard perspective as shown below. This view is used to show the aggregate of stack traces for the selected events.

New in JMC 8 is the Graph View, a directed graph where each node contains an individual method.

The picture above also shows method profiling predecessors and successors which were removed in JMC 7. However, due to customer demand, they are reintroduced in JMC 8.

Graph View isn’t supported on Windows at this time. With the other supported operating systems, inspect the JMC console output for empty graphs as it may sometimes be necessary to install WebKit. On Linux, for example, WebKit may be installed as follows:

apt install libwebkit2gtk-4.0-dev

JMC 8 marks the first release of the JMC Agent. With the agent, JFR events can be added declaratively to any codebase. The agent uses the JMX API to control the instrumentation. Events can be used to capture elements such as fields and parameter values.

The new Rules API 2.0 makes it possible to use intermediate results from other rules. JFR Writer is introduced as a new core module. It may be used for testing purposes by writing events into the Java buffers.

Areas for improvement have already been considered for future versions of JMC. A new allocation event is introduced in JDK 16. In some cases, allocation events occur very often and impact performance. The new solution uses data production rates instead of sampling at a specific point in time to reduce overhead.

The graph visualizer also has some performance challenges when a significant amount of data and nodes are displayed. Marcus Hirt explained that these will be improved based on papers related to graph pruning in noisy networks.

The Flame Graph and Graph Views work based on counts, which works well for CPU load cases. However, for allocation, it’s better to use memory as the measurement. This will be resolved by adding an attribute selector for the graphs.

The JMC Agent, now part of JMC, and will also be used for future improvements. One of them is the ability to right-click on a stack frame to retrieve more detailed information.

Marcus Hirt, director of engineering at Datadog and project lead for the OpenJDK JMC project, authored several interesting JMC-related blog posts and a tutorial. More detailed information is also available in his JMC 8 and Beyond session.

Rate this Article