查看: 138|回复: 0

[Java语言] java9中gc log参数迁移

发表于 3 天前


本文主要研究一下java9 gc log参数的迁移。

统一JVM及GC的Logging

java9引进了一个统一的日志框架,把gc相关的log输出及配置也给纳入进来了。

相关JEP(JDK Enhancement Proposal)

  • JEP 158: Unified JVM Logging
  • JEP 264: Platform Logging API and Service
  • JEP 271: Unified GC Logging

Xlog语法

  1. -Xlog[:option]
  2. option := [<what>][:[<output>][:[<decorators>][:<output-options>]]]
  3. 'help'
  4. 'disable'
  5. what := <selector>[,...]
  6. selector := <tag-set>[*][=<level>]
  7. tag-set := <tag>[+...]
  8. 'all'
  9. tag := name of tag
  10. level := trace
  11. debug
  12. info
  13. warning
  14. error
  15. output := 'stderr'
  16. 'stdout'
  17. [file=]<filename>
  18. decorators := <decorator>[,...]
  19. 'none'
  20. decorator := time
  21. uptime
  22. timemillis
  23. uptimemillis
  24. timenanos
  25. uptimenanos
  26. pid
  27. tid
  28. level
  29. tags
  30. output-options := <output_option>[,...]
  31. output-option := filecount=<file count>
  32. filesize=<file size in kb>
  33. parameter=value
复制代码

what

主要是配置tag及level

tag

其中all代表所有的tag,其他的如下:

  1. 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

主要分off,trace,debug,info,warning,error

output

  1. - stdout(`Sends output to stdout`)
  2. - stderr(`Sends output to stderr`)
  3. - file=filename(`Sends output to text file(s)`)
复制代码

有如上三种,其中指定file的话,可以使用%p变量表示当前jvm的pid,用%t表示jvm的启动时间戳。比如

  1. -Xlog:gc:demoapp-gc-%p-%t.log
复制代码

输出的文件名如下:

  1. 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.567s)
  • 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

不指定的话,默认是uptime, level, and tags这三个。比如

  1. [3.080s][info][gc,cpu ] GC(5) User=0.03s Sys=0.00s Real=0.01s
复制代码

实例

  1. -Xlog:gc=trace:file=gctrace.txt:uptimemillis,pid:filecount=5,filesize=1024
复制代码

tag为gc,levle为trace,rotate文件数为5,每个文件1M,文件名为gctrace.txt,decrotators为uptimemillis和pid

输出实例

  1. [1110ms][1867] GC(2) Pause Remark 17M->17M(256M) 2.024ms
  2. [1110ms][1867] GC(2) Finalize Live Data 0.000ms
  3. [1110ms][1867] GC(2) Pause Cleanup 17M->17M(256M) 0.177ms
  4. [1112ms][1867] GC(2) Concurrent Cycle 7.470ms
  5. [2951ms][1867] GC(3) Pause Initial Mark (Metadata GC Threshold) 149M->30M(256M) 27.175ms
  6. [2951ms][1867] GC(4) Concurrent Cycle
  7. [2972ms][1867] GC(4) Pause Remark 32M->32M(256M) 5.132ms
  8. [2974ms][1867] GC(4) Finalize Live Data 0.000ms
  9. [2974ms][1867] GC(4) Pause Cleanup 32M->32M(256M) 0.214ms
  10. [2976ms][1867] GC(4) Concurrent Cycle 25.422ms
复制代码

迁移

旧版GC相关参数迁移

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.

旧版运行时参数迁移

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 Unified 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 Unified 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.

小结

java9把gc log的选型及输出也给统一到了Xlog中,可以按照官方给出的迁移表进行迁移。



回复

使用道具 举报