This sample shows how to use GCToolKit to analyze a GC log file and report on total heap occupancy after a GC cycle has been completed. For more details on how GCToolKit and this sample work, visit Introducing Microsoft GCToolKit.
We use the Maven wrapper (mvnw) so you don't have to change your system wide Maven.
Install the sample to your local maven repository with mvnw install, then use mvnw exec:exec to run the sample.
mvnw clean install
mvnw exec:execBy default, the sample analyzes ../gclogs/preunified/cms/defnew/details/defnew.log. Set the parameter gcLogPath to analyze a different GC log file.
mvnw exec:exec -DgcLogFile=../gclogs/unified/parallel/parallelgc.logThe sample can also be run from the command line with Java 11 or higher. Compile the sample with mvnw compile dependency:copy-dependencies,
then run java with --module-path and give it the path to a GC log file as an argument.
mvnw clean compile dependency:copy-dependencies
java --module-path target/classes:target/lib --module com.microsoft.gctoolkit.sample/com.microsoft.gctoolkit.sample.Main ../gclogs/preunified/cms/defnew/details/defnew.logIf you try to run the exec:java goal, you may see the following error:
Unable to parse configuration of mojo org.codehaus.mojo:exec-maven-plugin:3.0.0:java for parameter arguments: Cannot store value into array
This has something to do with the Exec Maven Plugin, which automatically builds the command line from the project dependencies. But it is unclear exactly what the cause of this issue is. The solution is to use the exec:exec goal.
There are two possible issues here.
- There is no
gclogsdirectory in the top-level directory. The sample usesunit-testdata from building GCToolKit. Either runmvnw testfrom the top-level directory, or use-DgcLogFile=<path-to-gc-log-file>argument to specify a log file. - The sample is not being run from the
sampledirectory. Please ensure you are in the sample directory before executingmvnw exec:exec.