Gc log parameter migration in Java 9 and java9gclog migration
Collation
This article mainly studies the migration of gc log parameters in Java 9.
Unified JVM and GC Logging
Java 9 introduces a unified log framework to include gc-related log output and configuration.
JEP (JDK Enhancement Proposal)
- JEP 158: uniied JVM Logging
- JEP 264: Platform Logging API and Service
- JEP 271: uniied GC Logging
Xlog syntax
-Xlog[:option] option := [<what>][:[<output>][:[<decorators>][:<output-options>]]] 'help' 'disable' what := <selector>[,...] selector := <tag-set>[*][=<level>] tag-set := <tag>[+...] 'all' tag := name of tag level := trace debug info warning error output := 'stderr' 'stdout' [file=]<filename> decorators := <decorator>[,...] 'none' decorator := time uptime timemillis uptimemillis timenanos uptimenanos pid tid level tags output-options := <output_option>[,...] output-option := filecount=<file count> filesize=<file size in kb> parameter=value
What
It mainly configures the tag and level.
Tag
All indicates all tags, and the others are as follows:
add,age,alloc,annotation,aot,arguments,attach,barrier,biasedlocking,blocks,bot,breakpoint,bytecode,census,class,classhisto,cleanup,compaction,comparator,constraints,constantpool,coops,cpu,cset,data,defaultmethods,dump,ergo,event,exceptions,exit,fingerprint,freelist,gc,hashtables,heap,humongous,ihop,iklass,init,itables,jfr,jni,jvmti,liveness,load,loader,logging,mark,marking,metadata,metaspace,method,mmu,modules,monitorinflation,monitormismatch,nmethod,normalize,objecttagging,obsolete,oopmap,os,pagesize,parser,patch,path,phases,plab,preorder,promotion,protectiondomain,purge,redefine,ref,refine,region,remset,resolve,safepoint,scavenge,scrub,setting,stackmap,stacktrace,stackwalk,start,startuptime,state,stats,stringdedup,stringtable,subclass,survivor,sweep,system,task,thread,time,timer,tlab,unload,update,verification,verify,vmoperation,vtables,workgang
Level
Mainly divided into off, trace, debug, info, warning, error
Output
- stdout(`Sends output to stdout`)- stderr(`Sends output to stderr`)- file=filename(`Sends output to text file(s)`)
If file is specified, the % p variable can be used to represent the pid of the current jvm, and % t can be used to represent the jvm startup timestamp. For example
-Xlog:gc:demoapp-gc-%p-%t.log
The output file name is as follows:
demoapp-gc-1678-2018-03-01_21-44-18.log
Decorators
- Time -- Current time and date in ISO-8601 format
- Uptime -- Time since the start of the JVM in seconds and milliseconds (e.g., 6.567 s)
- Timemillis -- The same value as generated by System. currentTimeMillis ()
- Uptimemillis -- Milliseconds since the JVM started
- Timenanos -- The same value as generated by System. nanoTime ()
- Uptimenanos -- Nanoseconds since the JVM started
- Pid -- The process identifier
- Tid -- The thread identifier
- Level -- The level associated with the log message
- Tags -- The tag-set associated with the log message
If this parameter is not specified, the default value is uptime, level, and tags. For example
[3.080s][info][gc,cpu ] GC(5) User=0.03s Sys=0.00s Real=0.01s
Instance
-Xlog:gc=trace:file=gctrace.txt:uptimemillis,pid:filecount=5,filesize=1024
Tagis gc, levleis trace, rotatefile number is 5, each file is 1 m, the file name is gctrace.txt, decrotators is uptimemillis and pid
Output instance
[1110ms][1867] GC(2) Pause Remark 17M->17M(256M) 2.024ms[1110ms][1867] GC(2) Finalize Live Data 0.000ms[1110ms][1867] GC(2) Pause Cleanup 17M->17M(256M) 0.177ms[1112ms][1867] GC(2) Concurrent Cycle 7.470ms[2951ms][1867] GC(3) Pause Initial Mark (Metadata GC Threshold) 149M->30M(256M) 27.175ms[2951ms][1867] GC(4) Concurrent Cycle[2972ms][1867] GC(4) Pause Remark 32M->32M(256M) 5.132ms[2974ms][1867] GC(4) Finalize Live Data 0.000ms[2974ms][1867] GC(4) Pause Cleanup 32M->32M(256M) 0.214ms[2976ms][1867] GC(4) Concurrent Cycle 25.422ms
Migration
Migration of GC-related parameters in earlier versions
Legacy Garbage Collection (GC) Flag |
Xlog Configuration |
Comment |
G1PrintHeapRegions |
-Xlog: gc + region = trace |
Not Applicable |
GCLogFileSize |
No configuration available |
Log rotation is handled by the framework. |
NumberOfGCLogFiles |
Not Applicable |
Log rotation is handled by the framework. |
PrintAdaptiveSizePolicy |
-Xlog: ergo * = level |
Use a level of debug for most of the information, or a level of trace for all of what was logged for PrintAdaptiveSizePolicy. |
PrintGC |
-Xlog: gc |
Not Applicable |
PrintGCApplicationConcurrentTime |
-Xlog: safepoint |
Note that PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime are logged on the same tag and aren't separated in the new logging. |
PrintGCApplicationStoppedTime |
-Xlog: safepoint |
Note that PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime are logged on the same tag and not separated in the new logging. |
PrintGCCause |
Not Applicable |
GC cause is now always logged. |
PrintGCDateStamps |
Not Applicable |
Date stamps are logged by the framework. |
PrintGCDetails |
-Xlog: gc * |
Not Applicable |
PrintGCID |
Not Applicable |
Gc id is now always logged. |
PrintGCTaskTimeStamps |
-Xlog: task * = debug |
Not Applicable |
PrintGCTimeStamps |
Not Applicable |
Time stamps are logged by the framework. |
PrintHeapAtGC |
-Xlog: gc + heap = trace |
Not Applicable |
PrintReferenceGC |
-Xlog: ref * = debug |
Note that in the old logging, PrintReferenceGC had an effect only if PrintGCDetails was also enabled. |
PrintStringDeduplicationStatistics |
-Xlog: stringdedup * = debug |
Not Applicable |
PrintTenuringDistribution |
-Xlog: age * = level |
Use a level of debug for the most relevant information, or a level of trace for all of what was logged for PrintTenuringDistribution. |
UseGCLogFileRotation |
Not Applicable |
What was logged for PrintTenuringDistribution. |
Parameter migration in earlier versions
Legacy Runtime Flag |
Xlog Configuration |
Comment |
TraceExceptions |
-Xlog: exceptions = info |
Not Applicable |
TraceClassLoading |
-Xlog: class + load = level |
Use level = info for regular information, or level = debug for additional information. in uniied Logging syntax,-verbose: class equals-Xlog: class + load = info, class + unload = info. |
TraceClassLoadingPreorder |
-Xlog: class + preorder = debug |
Not Applicable |
TraceClassUnloading |
-Xlog: class + unload = level |
Use level = info for regular information, or level = trace for additional information. in uniied Logging syntax,-verbose: class equals-Xlog: class + load = info, class + unload = info. |
VerboseVerification |
-Xlog: verification = info |
Not Applicable |
TraceClassPaths |
-Xlog: class + path = info |
Not Applicable |
TraceClassResolution |
-Xlog: class + resolve = debug |
Not Applicable |
TraceClassInitialization |
-Xlog: class + init = info |
Not Applicable |
TraceLoaderConstraints |
-Xlog: class + loader + constraints = info |
Not Applicable |
TraceClassLoaderData |
-Xlog: class + loader + data = level |
Use level = debug for regular information or level = trace for additional information. |
TraceSafepointCleanupTime |
-Xlog: safepoint + cleanup = info |
Not Applicable |
TraceSafepoint |
-Xlog: safepoint = debug |
Not Applicable |
TraceMonitorInflation |
-Xlog: monitorinflation = debug |
Not Applicable |
TraceBiasedLocking |
-Xlog: biasedlocking = level |
Use level = info for regular information, or level = trace for additional information. |
TraceRedefineClasses |
-Xlog: redefine + class * = level |
Level = info, = debug, and = trace provide increasing amounts of information. |
Summary
Java 9 unifies the selection and output of gc logs into Xlog, which can be migrated according to the migration table officially provided.