java9中gc log参数迁移
作者:codecraft 发布时间:2022-06-28 03:21:01
序
本文主要研究一下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相关参数迁移
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中,可以按照官方给出的迁移表进行迁移。
来源:https://segmentfault.com/a/1190000013475524


猜你喜欢
- java内存分析类加载的过程类的加载与ClassLoader的理解类的初始化package Collections;public class
- 前言你是否在onStart()启动过某项任务却忘记在onStop()中取消呢?人不是机器,难免会有错漏。就算老手不会犯错,也不能保证新人不会
- 前言在Spring Boot中有一个注释@Async,可以帮助开发人员开发并发应用程序。但使用此功能非常棘手。在本博客中,我们将了解如何将此
- 本文实例讲述了C#实现为一张大尺寸图片创建缩略图的方法。分享给大家供大家参考。具体实现方法如下:public static Bitmap C
- 最近项目中用到了service进行计时,在连接USB的情况下一切正常,但是拔掉USB后发现,手机进入休眠后service停止了工作。最后通过
- 以下内容通过1、实现目标注入程序,2、实现主程序,3、实现注入函数,4、thumb指令集实现等4个方面详细分析了android中inline
- Lucene提供了一个简单却强大的应用程序接口(API),能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工
- 什么是ApplicationContext?它是Spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些。 App
- 前言:本人目前从事java开发,但同时也在学习各种前端技术,下面是我做的一个前后端分离项目的一个小案例,不足之处请多多指教1. 项目技术选型
- IDEA 2020.3.X 创建scala环境(默认jdk,maven环境已配置)一、查看idea中scala兼容版本二、下载scala官网
- 我就废话不多说,大家还是直接看代码吧~/*** * 英文 */String abc1 = "百度科技(123)公司1";
- 引言在前面的内容中,我们先是一一介绍了Collection集合中都有哪些种类的集合,并且详细地讲解了List集合中的相关知识,那么今天我们来
- 在logback.xml中加上该配置,包名如:com.xxx<logger name="packageName"
- 前言在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似ke
- Maven Repository仓库的具体使用不知道大家是不是这样,反正我访问官网的时候不是非常慢就是崩溃,所以我就将我用过的Maven依赖
- 1.生成自己的注解(为了确定在哪些位置使用)/** * 关闭patch delete的model处理,否则会报错 */@Target({El
- 详细描述maven中央仓库发布jar包的中间过程, 以及遇到的一些问题汇总, 尽量用文字描述清楚, 耐心看下去, 就一定会发布成功----S
- @GetMapping和@GetMapping(value=““)区别背景初期对于@GetMappi
- java编码中经常用到代理,代理分为静态代理和 * 。其中 * 可以实现spring中的aop。一、静态代理:程序运行之前,程序员就要编
- spring boot是个好东西,可以不用容器直接在main方法中启动,而且无需配置文件,方便快速搭建环境。可是当我们要同时启动2个spri