首页 > 编程语言 >Java GC日志分析

Java GC日志分析

时间:2023-12-13 17:47:04浏览次数:28  
标签:输出 Java Xlog GC 格式 output 日志 虚拟机

阅读分析虚拟机和垃圾收集器的日志是处理Java虚拟机内存问题必备的基础技能。

一、JDK统一日志格式
垃圾收集器日志是一系列人为设定的规则,多少有点随开发者编码时的心情而定,没有任何的“业界标准”可言,换句话说,每个收集器的日志格式都可能不一样。除此以外还有一个麻烦,在JDK 9以前,HotSpot并没有提供统一的日志处理框架,虚拟机各个功能模块的日志开关分布在不同的参数上,日志级别、循环日志大小、输出格式、重定向等设置在不同功能上都要单独解决。直到JDK 9,这种混乱不堪的局面才终于消失,HotSpot所有功能的日志都收归到了-Xlog参数上,这个参数的能力也相应被极大拓展了。

Xlog选项支持的参数如下:

  • -Xlog 使用info级别启用JVM日志(-Xlog等价于-Xlog:all=info:stdout:uptime,level,tags)
  • -Xlog:help:打印Xlog帮助文档
  • -Xlog:disable:关闭所有日志记录并清除日志记录框架的所有配置,包括警告和错误的默认配置
  • -Xlog[:option]:按照命令行上出现的顺序应用多个参数。同一输出的多个参数按其给定顺序覆盖。option的格式为:

 

-Xlog[:[what][:[output][:[decorators][:output-options[,...]]]]]

1、what:选择器,由标签(Tag)和日志级别(Level)共同组成。格式:tag1[+tag2...][*][=level][,...] 。除非用*指定了通配符,否则只有匹配了指定tag的日志消息才会被匹配。

(1)标签Tag:可理解为虚拟机中某个功能模块的名字,它告诉日志框架用户希望得到虚拟机哪些功能的日志输出。垃圾收集器的标签名称为“gc”,全部支持的功能模块标签名如下:(如指定为all,则表示下面所有标签的组合)

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、

(2)日志级别:从低到高有Trace, Debug, Info, Warning, Error, Off六种级别, 日志级别决定了输出信息的详细程度,默认级别为Info,HotSpot的日志规则与Log4j、SLF4j这类Java日志框架大体上是一致的。

2、output:设置输出类型。默认为stdout。
-Xlog 支持以下类型的输出:

  • stdout :将输出发送到标准输出;
  • stderr :将输出发送到stderr;
  • file=filename:将输出发送到文本文件。你还可以让文件按照文件大小轮换,例如每记录10M就轮换,只保留5个文件等。默认情况下,最多保留5个20M的文件。可使用 filesize=10M, filecount=5 格式去指定文件大小和保留的文件数。

3、decorators:装饰器,用来装饰消息,记录与消息有关的信息。使用一系列自定义的装饰器去配置output,来要求每行日志输出都附加上额外的内容。可以为每个output配置一组自定义的装饰器,输出顺序和定义的顺序相同。缺省的装饰器为uptime、level和tags。
支持附加在日志行上的信息包括:

  • time or t :ISO-8601格式的当前日期时间;
  • utctime or utc :UTC格式的当前日期时间;
  • uptime or u :JVM启动了多久,以秒或毫秒为单位。例如6.567s;
  • timemillis or tm: 相当于 System.currentTimeMillis();
  • uptimemillis or um :JVM启动以来的毫秒数;
  • timenanos or tn :相当于 System.nanoTime();
  • uptimenanos or un: JVM启动以来的纳秒数;
  • hostname or hn :主机名;
  • pid or p :进程号;
  • tid or ti :线程号;
  • level or l :与日志消息关联的级别;
  • tags or tg :与日志消息关联的标签集;

如果不指定, 默认值是uptime、 level、 tags这三个, 此时日志输出类似于以下形式:

[3.080s][info][gc,cpu] GC(5) User=0.03s Sys=0.00s Real=0.01s

4、output-options:设置Xlog的日志输出output选项,格式:

filecount=file-count filesize=file size with optional K, M or G suffix

5、使用示例

 

标签:输出,Java,Xlog,GC,格式,output,日志,虚拟机
From: https://www.cnblogs.com/cac2020/p/17899567.html

相关文章

  • Aapche Dubbo Java反序列化漏洞(CVE-2019-17564)
    AapcheDubboJava反序列化漏洞(CVE-2019-17564)漏洞描述ApacheDubbo是一款高性能、轻量级的开源JavaRPC服务框架。Dubbo可以使用不同协议通信,当使用http协议时,ApacheDubbo直接使用了Spring框架的org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter类做远程......
  • 无涯教程-Java - valueOf()函数
    valueOf方法返回相关的Number对象,其中包含传递的参数的值,参数可以是原始数据类型,字符串等。此方法是静态方法。该方法可以使用两个参数,其中一个是字符串,另一个是基数。valueOf()-语法以下是此方法的所有变体-staticIntegervalueOf(inti)staticIntegervalueOf(String......
  • 深入解析Kafka:Java开发者的必备利器
    摘要:本文将深入解析Kafka,探讨其核心概念、特性、使用场景以及如何使用Java进行Kafka的开发。通过图文并茂的方式,帮助读者更好地理解和掌握Kafka。一、Kafka简介Kafka是一个分布式流处理平台,由Apache开源。它提供了高吞吐量、低延迟、可扩展性和容错性的数据流处理能力,广泛应用于大......
  • JavaScript Library – Lit
    前言我写过一篇关于Lit的文章,MaterialDesign,AngularMaterial,MDC,MWC,Lit的关系。如今material-webMWC已经发布1.0了,估计Angular也会在不远的将来从material-components-webMDC迁移到MWC。以后,我们要想深入理解AngularMaterial就必须对MWC有一定了解......
  • 九,JAVA继承
    继承/extends子类继承父类后,子类可以获取父类中所有的非私有成员子类:被抽取共同成员的类,通常是多个类,Student,Worker父类共同成员所在的类,通常是少的一方,PersonJava中的类与类之间的继承是:单继承,支持多层继承Object类:上帝类,是所有类的父类java中如果一个类没有声......
  • Spring Boot应用启动 java -jar
    1.系统参数的标准格式为:-Dargname=argvalue,多个参数之间用空格隔开,如果参数值中间有空格,则用引号括起来#1.基本java-jarrun.jar#2.指定java路径nohup/opt/mdw/jdk1.8.0_241/bin/java-jarrun.jar#3.如果中文乱码,指定jar包的运行环境的编码java-Dfile.encoding=utf-8-......
  • 基于JavaWeb的电影推荐平台的设计与实现
    1.项目演示前端演示地址:http://96.8.117.232:8082/后端演示地址:http://96.8.117.232:8083/(管理员账号:admin密码123456)访问慢是因为服务器是海外的,国内访问慢,便宜VPS凑合了2.项目介绍技术列表技术说明SpringBootWeb应用开发框架Vue3.xjava1.8mysql......
  • 无涯教程-Java - compareTo()函数
    该方法将调用该方法的Number对象与参数进行比较。可以比较Byte,Long,Integer等。但是,无法比较两种不同的类型,参数和调用该方法的Number对象应为同一类型。compareTo()-语法publicintcompareTo(NumberSubClassreferenceName)这是参数的详细信息-referenceName  - ......
  • java学习01-项目,模块,包,类的关系
    一.引言在Java编程语言中,项目、模块、包和类是组织代码的不同层次,它们之间的关系构成了Java程序的框架和结构。下面将详细解释这些概念以及它们之间的关系。二.定义项目(Project):项目是最大的组织单位,通常代表一个完整的软件应用或一组相关的应用。一个项目可以包含多个模块,这些......
  • JavaWeb - Day06 -MySQL-DDL、DML
    01.MySQL-课程介绍什么是数据库?数据库:英文为DataBase,简称DB,它是存储和管理数据的仓库。像我们日常访问的电商网站京东,企业内部的管理系统OA、ERP、CRM这类的系统,以及大家每天都会刷的头条、抖音类的app,那这些大家所看到的数据,其实都是存储在数据库中的。最终这些数据,只是在......