The latest release of JDK Mission Control was just released! Since this is the source release, it may still take a bit of time until the downstream vendors release binary builds of JDK Mission Control 8.2.0. I will try to remember to tweet or say something on the JMC Facebook page once the binaries start showing up.
Here’s what’s new:
Mission Control 8.2 – New and Noteworthy
JMC 8.2 – New Release!
This is a new minor release of JDK Mission Control. The JMC application requires JDK 11+ to run, but can still be used to connect to, and parse JFR recordings from, OpenJDK 8u272+ and Oracle JDK 7u40+. It can also still open and visualize flight recordings from JDK 7 and 8.
Eclipse 4.22 support
The Mission Control client is now built to run optimally on Eclipse 2021-06 and later. To install JDK Mission Control into Eclipse, go to the update site (Help | Install New Software…). The URL to the update site will be vendor specific, and some vendors will instead provide an archive with the update site.
Minor bugfixes and improvements
There are 83 fixes and improvements in this release. Check out the JMC 8.2 Result Dashboard (https://bugs.openjdk.java.net/secure/Dashboard.jspa?selectPageId=20804) for more information.
Binary build for Apple ARM
JDK Mission Control is now built for Apple ARM, allowing JMC to be run natively (without Rosetta x86 emulation) on Apple M1.
Parser support for async profiler
Parser support has been added for frame types generated by async profiler, such as Native, C++ and Kernel.
There is now a new rule for explicit invocations of System.gc().
Java Flight Recorder (JFR)
Heat map view
A new heat map view has been added, which is handy for seeing when events are taking place. Use Window | Show View | Other…, and select the Heatmap View under Mission Control and click Open to open the view.
Websocket for selections
There is a new websocket API available that pushes stack trace data from selections in the JFR UI as JSON on a user defined port. This allows for programmatic control of the visualization directly in the browser. Tools like observablehq.com can be used to invent new visualizations, or to alter the visualization. To get started, simply go to the Flight Recorder preferences in JMC, and select the Websocket port to use (0 to disable). A set of example visualizations are available here: https://observablehq.com/collection/@cimi/java-mission-control.
Synopsis: JFR parser struct types hashcode problem
Some JFR parser struct types were using lazily initialized attributes which happen to be a part of hashCode/equals computations.
Synopsis: Delays in rendering of JMX console graphs
Sometimes the updates of the JMX console graphs would be severely delayed on MacOS. This is now fixed.
Synopsis: JfrRecordingTest (uitest) hangs on the automated analysis page
Trying to run uitests on Fedora hangs on JfrRecordingTest. This was fixed after the Eclipse platform update.
Synopsis: Hibernation and time
After the bugfix of https://bugs.openjdk.java.net/browse/JDK-6523160 in JDK 8, the RuntimeMXBean#getUptime() attribute was re-implemented to mean “Elapsed time of JVM process”, whilst it previously was implemented as time since start of the JVM process. The uptime attribute is used by JMC, together with RuntimeMXBean#getStartTime(), to estimate the actual server time. This means that time stamps, as well as remaining time for a flight recording, can be wrong for processes on machines that have been hibernated.
Synopsis: JMC can’t attach to jlinked JVMs
This one is still under investigation, but it seems JMC can’t attach to certain jlinked images.
Synopsis: The graph and flame graph view does not work on Windows
This is due to a problem with the Windows based browser component in SWT. We’re hoping for a fix in the component for a future version of the Eclipse platform.
I would appreciate it if you would tell me more about the new rule for explicit invocations of System.gc(). Based on the image of Duke holding the sign, it would appear as if the new rule won’t allow an explicit call to System.gc().
[…] Misi JDK (JMC) 8.2.0 adalah dilepaskan menampilkan: dukungan untuk Eclipse 2021-06 dan yang lebih baru; build biner untuk Apple ARM yang […]
You mentioned “Binary build for Apple ARM”. Where can I find that?
It is up to the vendors building the binaries. I just filed this for Adoptium:
The rule will certainly complain if someone does explicit calls. 🙂
I built from source myself, worked fine (although I happened to buildings the 8.3 EA rather than 8.2). Weirdly enough my MacOS system report claims that the binary is for iOS ♂️
Now that JMC8.2 was released I was wondering if the following views are available in this release:
– Flame View
– Heatmap View
– JOverflow Treemap
– Graph View
The views are available but empty.
Is there any trick to make them work?
I am using the binaries files downloaded from Oracle: https://www.oracle.com/java/technologies/javase/products-jmc8-downloads.html
Thank you !
Hi Mario! Which platform are you on?
Is there any way to view the total objects allocated in TLAB over the period of the flight recording, like there was in Mission Control 5.x versions?
I’m seeing a weird issue in 8.2 which which I cannot explain.
I’m running my application with “-XX:FlightRecorderOptions=stackdepth=256”, “-XX:+UnlockDiagnosticVMOptions”, “-XX:+DebugNonSafepoints”, and I start my recording with
jcmd 1 JFR.start settings=profile duration=90s filename=profile.jfr
The result.jfr comes in at ~18 MB.
When I look at the Method profiling, the top method mentioned has a count of 10.
Also not seeing a single Write under Socket IO…
Any clues ?
Could the process be mostly idle or mostly running in native? Could you be using some I/O library that is doing I/O in native, e.g. Netty?
– When running JMC under Windows 10, I get no flame graph (the panel is blank). Is it a known limitation under Windows or a bug ?
– I noticed that in the Memory screen – Stack Trace panel : The percentage column represents the percentage of objects allocated (% of total count), but not the percentage of memory allocation.
For example I have a total allocation of 300MB for the byte class.(which is the result of about 3000 allocations) :
method A has allocated 1000 instances -> The percentage shown for this method is 30%, which makes it the first method in the list.
method Z has allocated only 30 instances -> The percentage shown for this method is less
than 1%, so it is way deeper in the list and almost unoticeable.
The problem is that I know for sure that the 30 instances of method B allocated a total of 120MB (each instance allocated a byte array of 4MB), which make it the method that allocated to most memory for the byte class.
This method should logically be in the first place in the list instead of being lost in the middle of the list.
Showing the % of total count instead of the % of total allocation memory makes it almost impossible to detect which part of the code filled up the memory the most.
I know that this information can be determined from the jfr file. Indeed if I open the same jfr file in JProfiler or IntelliJ they indeed show method Z as being the method which allocated the most byte arrays in term of size.
So I’m sure it would be possible in JMC.
Or maybe I’m missing an option that is already available to sort the list by percentage of memory allocated and display the corresponding allocated memory for each method ?
PS: In my last comment it seems the line returns have not been kept after I submitted my comment. It was not intentional for me to not have line return 😉
You will like 8.3.0, which is coming out at the end of September. There you can select which attribute to use as weight. 🙂
Great new thanks 🙂
Any idea about the flame graph not showing on Windows 10 (I’m using open jdk-18.104.22.168-hotspot to launch jmc) ?
I’ve searched in the know bugs but don’t see anything about this problem.
Note: I’ve noticed the Heatmap View panel is also blank
Maybe I could provide some logs ? (But I don’t see any log file in the JMC folder)
Sadly a known issue. Windows defaults to IE for the browser component, and it simply can’t handle what we’re doing in those views. On the positive side, Brice has a PR to replace the d3-flamegraph that I’m using in the flame graph with a Swing library that he wrote for flame graphs. That will, at least, make the Flame View work, no matter the platform. Won’t help for the Heatmap View. We’re hoping Eclipse will eventually make the web component default to Edge on Windows, now that IE is end-of-lifed. You can try running with -Dorg.eclipse.swt.browser.DefaultType=edge, but sadly you’ll have some other issues for now.
Just saw the comment about selectable weight attributes in 8.3.0. I was literally just looking at StackTraceTreeModel, which in master seems to support weights by arbitrary attributes, except that we never pass a non-null attribute to the constructor. Is there a branch in a fork somewhere I can test? (I can build jmc, have set up eclipse environment, etc.)
My specific concern is that it doesn’t break with negative weights, as my plan is to save malloc/free events with equal and opposite weights, so I can see native memory in use over arbitrary time ranges. (Roughly as in the async-profiler malloc branch, but it wouldn’t require matching pointer addresses during stack/flame rendering.)
Yes! You can either build the jmc8 branch or the master branch at this point.
[…] are encouraged to report bugs via the Java Bug Database.JDK Mission Control (JMC) 8.2.0 was released featuring: support for Eclipse 2021-06 and later; a binary build for Apple ARM allowing JMC to be […]