Have you ever wanted to check the current garbage collection (GC) heap size, check GC performance or display the parameters the JVM was started with? If you have environments that use Java, these questions as well as many others probably come to mind.
The IBM i 6.1 release introduced three new commands to assist in answering your JVM environment and performance questions:
- Work With JVM Jobs (WRKJVMJOB)
- Print JVM Job (PRTJVMJOB)
- Generate JVM Dump (GENJVMDMP)
The new commands can be used on any job where an IBM Technology for Java (IT4J) VM is currently running.
By default WRKJVMJOB will list all the currently active JVMs regardless of how they were started. GC information, JVM arguments, environment variables, thread information including Java thread names, the capability to see the Java stack frames, native heap sizes and more are available using WRKJVMJOB. (One thing that’s really cool here is the environment variables for the job-until WRKJVMJOB, there was no interface to easily display the environment variables of a job other than your own! So WRKJVMJOB has some interesting function beyond just working with JVMs!)
When JVM performance is being investigated, GC information is a requirement. Most will validly choose not to run with verbose GC enabled all the time, and having to restart the JVM just to enable verbose GC isn’t always an option. IBM i always keeps track of the last 300 GC cycles for each IT4J JVM. Just use WRKJVMJOB to print the GC Cycle Table to a spool file. The GC information in the spool file is in a somewhat readable form or IBM Support Assistant (ISA) Version 4 can access IBM Monitoring and Diagnostic Tools for Java — Garbage Collection and Memory Visualizer (GCMV) — to analyze the GC information. If you have your own favorite tool that analyzes the traditional verbose GC information you can specify -verbosegc on the Java command line or just use WRKJVMJOB to enable or disable verbose GC at any time. On IBM i, we allow you to collect GC information even when the JVM was not started with verbose GC enabled.
Interested in performing an analysis of the Java objects that exist in the GC heap? Use WRKJVMJOB to simplify the task. To perform an in-depth heap analysis, you need to generate a heap dump. In the past on IBM i and on other platforms, you had to start the JVM with some special Xdump options, find the process identifier of the JVM and then issue a command that looked like “kill -QUIT 5342”. I know you were thinking the first time you issued the command and probably still do today, “What were they thinking?”. On IBM i, we agreed and thought we can help. Without starting up the JVM with any special options, use WRKJVMJOB to request any IT4J JVM to generate a heap dump. We also have the capability to generate a Java or System dump if you run into a situation where it’s necessary. Once you have your heap dump, you can use ISA Version 4 to get access to the tool Memory Dump Diagnostic for Java (MDD4J) to analyze the GC heap. There are times when the special Xdump options may be necessary. They still can be specified on the Java command line as you would have done in the past. We have also provided an option in WRKJVMJOB on the Work With JVM Jobs panel (12=Dump) to generate a dump using the options specified on the Java command line.
WRKJOB also has a new option, 45, to invoke WRKJVMJOB if that job has an active JVM. Experiment with WRKJVMJOB; you’ll probably find information that can be helpful and is readily available. Be sure to load the latest Java Group PTF to get the most current version of the commands.
The complete list of options for WRKJVMJOB can be found in the Knowledge Center.
PRTJVMJOB allows you to target a specific JVM and lets you directly print the information you can display under WRKJVMJOB. The complete list of options for PRTJVMJOB can be found in the Knowledge Center.
GENJVMDMP allows you to target a specific JVM and request it to generate a Java, System or Heap dump. The dump options are also available under WRKJVMJOB. The complete list of GENJVMDMP options can be found in the Knowledge Center.
Additional information can be found in IBM Monitoring and Diagnostics Tools for Java Knowledge Center.
This week’s post was written by Arv Fisher. Arv is the team leader of the Java development team in the IBM i development lab. Thanks, Arv!
This blog post was originally published on IBMSystemsMag.com and is reproduced here by permission of IBM Systems Media.