If there is one tool that have almost all what is needed for monitoring, troubleshooting and tuning Java apps, that will be OpenJDK Mission Control.
There are several reasons why JMC will be hot topic in Java events from now on:
- More than 95% of all issues related to JVM, application servers, deployed apps and even OS can be resolved by leveraging openJDK Mission Control
- less than 3% overhead makes JFR ideal for production environments
- Java Flight Recorder is Open Sourced now and it’s bundled with OpenJDK 11
- Java Mission Control went Open Source too, thus both components can be used in production
Although latest version 7.1 is in Early Access state, even now you can play with and figure out what you can expect in the final release.
From Automated Analysis results, through the spectacular views of most important events, flexible configuration, filtering only events of interest, this tool will become (and already is) pearl in Java developing, monitoring, troubleshooting and tuning.
Equipped with GPL license, it’s not difficult to imagine that the whole ecosystem will be created around with dozens of plug-ins (in Oracle JDK version of JMC there are just a few plugins available like JConsole, DTrace Recorder, WebLogic Tab Pack and few more).
I’ll write more about JMC in the future.
In case you cannot wait, in Java conference in Zagreb, Croatia, on 23rd February 2019, I’ll talk more about JMC.
Below you can find the conference link with all details:
Here I’ll describe how you can install OpenJDK JMC properly, since on many sites I’ve found that provided instructions are not 100% accurate (probably due to the constant change in repo), and currently normal installation procedure doesn’t exist (OpenJDK Mission Control is still in development phase).
1. Installing Mercurial
root@performatune.com:~>dnf install mercurial
Dependencies resolved.
==============================================================================================================================================================================================================================================================
Package Arch Version Repository Size
==============================================================================================================================================================================================================================================================
Installing:
mercurial x86_64 4.5.3-1.fc29 fedora 4.3 M
Transaction Summary
==============================================================================================================================================================================================================================================================
Install 1 Package
Total download size: 4.3 M
Installed size: 19 M
Downloading Packages:
mercurial-4.5.3-1.fc29.x86_64.rpm 1.6 MB/s | 4.3 MB 00:02
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 981 kB/s | 4.3 MB 00:04
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : mercurial-4.5.3-1.fc29.x86_64 1/1
Running scriptlet: mercurial-4.5.3-1.fc29.x86_64 1/1
Verifying : mercurial-4.5.3-1.fc29.x86_64 1/1
Installed:
mercurial-4.5.3-1.fc29.x86_64
Complete!
2. Installing Apache Maven
#Download: apache-maven-3.6.0-bin.tar.gz
#from https://maven.apache.org/download.cgi
root@performatune.com:/opt>tar xvfz apache-maven-3.6.0-bin.tar.gz
#Edit .bash_profile and add Maven in the PATH
export PATH=/opt/apache-maven-3.6.0/bin:$PATH
#Apply new environment
user@performatune.com:~>. .bash_profile
#Check if Maven is installed correctly
user@performatune.com:~>mvn -v
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T20:41:47+02:00)
Maven home: /opt/apache-maven-3.6.0
Java version: 11.0.1, vendor: Oracle Corporation, runtime: /usr/java/openjdk-11.0.1
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.19.13-300.fc29.x86_64", arch: "amd64", family: "unix"
3. Make sure JDK8 environment is set in terminal and then execute:
hg clone http://hg.openjdk.java.net/jmc/jmc/
user@performatune.com:~/Downloads/xxx>hg clone http://hg.openjdk.java.net/jmc/jmc/
destination directory: jmc
requesting all changes
adding changesets
adding manifests
adding file changes
added 117 changesets with 5318 changes to 4213 files
new changesets a76a464b3764:0e7f3f9e078c
updating to branch default
4199 files updated, 0 files merged, 0 files removed, 0 files unresolved
4. Get the third party dependencies into a local p2 repo and make it available on localhost:
user@performatune.com:~/Downloads/xxx>cd jmc/releng/third-party/
user@performatune.com:~/Downloads/xxx/jmc/releng/third-party>mvn p2:site
Generation completed with success [0 seconds].
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.454 s
[INFO] Finished at: 2019-01-14T23:05:05+01:00
[INFO] ------------------------------------------------------------------------
5. Get third party dependencies – Part 2
user@performatune.com:~/Downloads/xxx/jmc/releng/third-party>mvn jetty:run
6. Leave the current terminal open, and then open a new terminal (JDK8 env) ad then in another terminal (in the project root):
user@performatune.com:~/Downloads/xxx/jmc>cd core/
user@performatune.com:~/Downloads/xxx/jmc/core>mvn clean install
------------------------------------------------------------------------
[INFO] Reactor Summary for missioncontrol.core 7.1.0-SNAPSHOT:
[INFO]
[INFO] missioncontrol.core ................................ SUCCESS [ 24.295 s]
[INFO] common ............................................. SUCCESS [ 19.272 s]
[INFO] flightrecorder ..................................... SUCCESS [ 1.861 s]
[INFO] flightrecorder.rules ............................... SUCCESS [ 1.328 s]
[INFO] flightrecorder.rules.jdk ........................... SUCCESS [ 1.657 s]
[INFO] missioncontrol.core.tests .......................... SUCCESS [ 0.006 s]
[INFO] common.test ........................................ SUCCESS [ 35.319 s]
[INFO] flightrecorder.test ................................ SUCCESS [ 2.539 s]
[INFO] flightrecorder.rules.test .......................... SUCCESS [ 0.621 s]
[INFO] flightrecorder.rules.jdk.test ...................... SUCCESS [ 5.822 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:58 min
[INFO] Finished at: 2019-01-14T23:12:55+01:00
[INFO] ------------------------------------------------------------------------
user@performatune.com:~/Downloads/xxx/jmc/core>cd ..
user@performatune.com:~/Downloads/xxx/jmc>mvn package
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 05:50 min
[INFO] Finished at: 2019-01-14T23:19:52+01:00
[INFO] ------------------------------------------------------------------------
7. Start JMC to check if it is working properly
#Make sure you set JAVA_HOME to point to OpenJDK 11
user@performatune.com:~/Downloads/jmc/target/products/org.openjdk.jmc/linux/gtk/x86_64>echo $JAVA_HOME
/usr/java/openjdk-11.0.1
#Start JMC console
export JAVA_HOME=/usr/java/openjdk-11.0.1
export PATH=$JAVA_HOME/bin:$PATH
user@performatune.com:~/Downloads/jmc/target/products/org.openjdk.jmc/linux/gtk/x86_64>./jmc -vm $JAVA_HOME/bin
Summary:
If you don’t have a source code of some application, and you need to troubleshoot and to solve the problem on production, you’ll start appreciate this phenomenal tool.
OpenJDK Mission Control is now available as Open Source software and no license is needed for it’s usage.
For that reason I expect to see tremendous growth of it’s usage, growth in a number and quality of available plug-ins that will help the whole ecosystem around JVM from enterprise applications up to the Big Data, Machine Learning, AI and High Performance Computing.
Time will show if I’m right, although in this case chances are more than promising.
Comments