- jps (Java Process Status)
- jstat (JVM Statistics Monitoring Tool)
- jcmd (JVM Diagnostic Command)
- jmap (Memory Map for Java)
- Conclusion
Java applications often run in complex and dynamic environments, making it essential to monitor their performance and diagnose issues efficiently. Fortunately, the Java Development Kit (JDK) comes with a set of powerful tools for this purpose. In this guide, we will explore four essential tools: jps
, jstat
, jcmd
, and jmap
. We’ll discuss their functionalities, sample usage, and how to interpret their output effectively.
1. jps
(Java Process Status)
The jps
tool lists Java Virtual Machine (JVM) processes on the local machine. It provides information such as the process ID (PID) and the main class or JAR file being executed.
Usage:
jps [options]
Sample Usage:
$ jps -l
12345 com.example.MainApp
Understanding the Output:
- The first column represents the PID.
- The second column displays the fully qualified class name or JAR file name of the main class.
2. jstat
(JVM Statistics Monitoring Tool)
jstat
is a command-line tool that provides information on JVM internal statistics such as garbage collection, class loading, compiler activity, and more.
Usage:
jstat [options] <vmid> [<interval> [<count>]]
Sample Usage:
$ jstat -gcutil 12345 1000 10
Understanding the Output:
- The output varies depending on the options used.
-gcutil
provides garbage collection statistics. - Columns represent different metrics like S0, S1 (survivor space), EC (eden space), EU (used eden space), OC (old space), OU (used old space), MC (metaspace), MU (used metaspace), etc.
3. jcmd
(JVM Diagnostic Command)
jcmd
is a versatile tool that can perform various operations on JVM processes, including thread dumps, heap dumps, GC operations, and more.
Usage:
jcmd <pid> <command> [<arguments>]
Sample Usage:
$ jcmd 12345 Thread.print
Understanding the Output:
- The output depends on the command used. For example,
Thread.print
prints thread stack traces. - It provides valuable insights into thread activities, including deadlock detection and monitoring.
4. jmap
(Memory Map for Java)
jmap
generates memory-related information for a given Java process, including heap dumps and memory usage statistics.
Usage:
jmap [option] <pid>
Sample Usage:
$ jmap -histo
94639
Capturing Heap Dump:
To capture a heap dump using jmap
, we need to use the dump
option:
jmap -dump:[live],format=b,file=<file-path> <pid>
Along with that option, we should specify several parameters:
live
: if set, it only prints objects which have active references and discards the ones that are ready to be garbage collected. This parameter is optional.format=b
: specifies that the dump file will be in binary format. If not set, the result is the same.file
: the file where the dump will be written to.pid
: id of the Java process.
Sample Heap Dump Usage:
$ jmap -dump:live,format=b,file=/tmp/dump.hprof 45817
Understanding the Output:
- The heap dump file (
dump.hprof
in the above example) contains a snapshot of the Java heap at the time the dump was taken. - Analyzing heap dumps can help diagnose memory leaks, understand memory usage patterns, and optimize garbage collection strategies.
By utilizing the jmap
tool to capture heap dumps, developers can gain valuable insights into the memory usage of Java applications and effectively troubleshoot memory-related issues.
Conclusion
In this guide, we’ve covered four essential Java monitoring and diagnostic tools: jps
, jstat
, jcmd
, and jmap
. These tools are invaluable for understanding JVM behavior, diagnosing performance issues, and troubleshooting memory-related problems. By mastering these tools and understanding their output, developers can effectively monitor and optimize Java applications for optimal performance and reliability.