java9 gc log参数迁移

本文主要研究一下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语法

-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

主要是配置tag及level

tag

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

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

- stdout(`Sends output to stdout`)
- stderr(`Sends output to stderr`)
- file=filename(`Sends output to text file(s)`)

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

-Xlog:gc:demoapp-gc-%p-%t.log

输出的文件名如下:

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这三个。比如 [3.080s][info][gc,cpu ] GC(5) User=0.03s Sys=0.00s Real=0.01s

实例

-Xlog:gc=trace:file=gctrace.txt:uptimemillis,pid:filecount=5,filesize=1024

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

输出实例

[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

旧版GC相关参数到Xlog的迁移

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.

旧版运行时参数到Xlog的迁移

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中,可以按照官方给出的迁移表进行迁移。

doc

  • Enable Logging with the JVM Unified Logging Framework
  • -Xlog Output
  • Convert GC Logging Flags to Xlog
  • Convert Runtime Logging Flags to Xlog

原文发布于微信公众号 - 码匠的流水账(geek_luandun)

原文发表时间:2018-03-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android 研究

APK安装流程详解12——PMS中的新安装流程上(拷贝)

从上面一片文章我们知道InstallAppProgress里面最后更新的代码是调用到PackageManager#installPackageWithVerif...

1411
来自专栏枕边书

在Spring-Boot中实现通用Auth认证的几种方式

最近一直被无尽的业务需求淹没,没时间喘息,终于接到一个能让我突破代码舒适区的活儿,解决它的过程非常曲折,一度让我怀疑人生,不过收获也很大,代码方面不明显,但感觉...

930
来自专栏JAVA高级架构

Netty原理浅析

Netty是JBoss出品的高效的Java NIO开发框架。本文将主要分析Netty实现方面的东西,由于精力有限,本人并没有对其源码做了极细致的研 究。如果下面...

1152
来自专栏老码农专栏

TodoBackend展示应用以及ActFramework的实现

1305
来自专栏老码农专栏

原 荐 一场版本升级引发的性能血案 - 之数

2323
来自专栏技术小黑屋

Android代码规范利器: Checkstyle

程序代码向来都不仅仅是用来运行的,写的一手好代码,易读,可维护应该是每个程序员所追求的。

1361
来自专栏架构师之旅

《Spring敲门砖之基础教程第一季》 第二章(1) Spring框架之IOC首例-HelloWorld

回顾 上一章我们主要学习了Spring的一些理论知识,对Spring框架有了一个总体的概括,大家应该在头脑里形成一个初步的印象,接下来我们就会针对Spring框...

20110
来自专栏GopherCoder

『如何构建命令行工具:YiYi』

1544
来自专栏喵了个咪的博客空间

[喵咪开源软件推荐(4)]Liunx跑分神器-unixbench

[喵咪开源软件推荐(4)]Liunx跑分神器-unixbench #w-blog博客 ? 哈喽大家好呀! 这次给大家带来一个Liunx跑分神奇,在笔者在老早之前...

3766
来自专栏纯洁的微笑

springboot(五):spring data jpa的使用

在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data ...

7199

扫码关注云+社区

领取腾讯云代金券