Java Mission Control & Java Flight Recorder
Last year, I got two opportunities to talk about Java Mission Control & Java Flight Recorder.
I first talked about "Using Java Mission Control & Java Flight Recorder" as an internal tech talk at WSO2. I must thank Srinath for giving me that opportunity.
After that, Prabath also invited me to do a talk at Java Colombo Meetup. Prabath, Thank you for inviting me and giving me the opportunity to talk at the Java Colombo Meetup!
I'm also very excited to see that Marcus Hirt, the Team Lead for Java Mission Control has mentioned about the Java Colombo Meetup in his blog post: "My Favourite JMC Quotes". It's so nice to see "Sri Lanka" was mentioned in his blog post! :)
Here are the slides used at the meetup.
Marcus Hirt's blog posts really helped me to understand JMC & JFR concepts and his tutorials were very helpful for the demonstrations.
In this blog post, I want to note down important instructions on using JFR and other tools.
I first started the talk by mentioning the various tools provided in the JDK.
Examples of using some Monitoring Tools: jstat
Examples of using some Troubleshooting Tools: jmap, jhat, jstack
I first talked about "Using Java Mission Control & Java Flight Recorder" as an internal tech talk at WSO2. I must thank Srinath for giving me that opportunity.
After that, Prabath also invited me to do a talk at Java Colombo Meetup. Prabath, Thank you for inviting me and giving me the opportunity to talk at the Java Colombo Meetup!
I'm also very excited to see that Marcus Hirt, the Team Lead for Java Mission Control has mentioned about the Java Colombo Meetup in his blog post: "My Favourite JMC Quotes". It's so nice to see "Sri Lanka" was mentioned in his blog post! :)
From Marcus' Blog |
Here are the slides used at the meetup.
Marcus Hirt's blog posts really helped me to understand JMC & JFR concepts and his tutorials were very helpful for the demonstrations.
In this blog post, I want to note down important instructions on using JFR and other tools.
Java Experimental Tools
I first started the talk by mentioning the various tools provided in the JDK.
Examples of using some Monitoring Tools: jstat
# List java processes. jps # Print a summary of garbage collection statistics. jstat -gcutil <pid>
Examples of using some Troubleshooting Tools: jmap, jhat, jstack
# Print a summary of heap sudo jmap -heap <pid> # Dump the Java heap in hprof binary format sudo jmap -F -dump:format=b,file=/tmp/dump.hprof <pid> # Analyze the heap dump jhat /tmp/dump.hprof # Print java stack traces jstack <pid>
Java Flight Recorder
We need to use following options to enable Java Flight Recorder.
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
To produce a Flight Recording from the command line, you can use “- XX:StartFlightRecording” option. For example
-XX:StartFlightRecording=delay=20s,duration=60s,name=Test,filename=recording.jfr,settings=profile
The relevant settings are in $JAVA_HOME/jre/lib/jfr.
Note that above command will start a "Time Fixed Recording"
You can also use following to change log levels in JFR.
-XX:FlightRecorderOptions=loglevel=info
Use the default recording option to start a "Continuous Recording"
-XX:FlightRecorderOptions=defaultrecording=true
Default recording can be dumped on exit. Only the default recording can be used with the dumponexit and dumponexitpath parameters.
-XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,dumponexitpath=/tmp/dumponexit.jfr
The "jcmd" command
The "jcmd" is a JVM Diagnostic Commands tool. This is a very useful command and we can send various diagnostics commands to a java process.
# View Diagnostic Commands jcmd <pid> help
As you can see, we can use this "jcmd" command to start a flight recording
# Start Recording jcmd <pid> JFR.start delay=20s duration=60s name=MyRecording filename=/tmp/recording.jfr settings=profile #Check recording jcmd <pid> JFR.check #Dump Recording jcmd <pid> JFR.dump filename=/tmp/dump.jfr name=MyRecording
Comments