参考文献

垃圾收集器日志

  • HotSpot 所有功能的日志都收归到了-Xlog参数

    1
    Xlog[:[selector][:[output][:[decorators][:output-options
    • 命令行中最关键的参数是选择器(Selector),它由标签(Tag)和日志级别 (Level)共同组成.标签可理解为虚拟机中某个功能模块的名字,它告诉日志框架用户希望得到虚拟机哪些功能的日志输出。垃圾收集器的标签名称为“gc”,由此可见,垃圾收集器日志只是 HotSpot 众多功能日志的其中一项,全部支持的功能模块标签名如下所示

      1
      2
      add,age,alloc,annotation,aot,arguments,attach,barrier,biasedlocking,blocks,bot,break 
      point,bytecode
    • 日志级别从低到高,共有Trace,Debug,Warning,Error,Off六种级别,日志级别决定了输出信息的详细程序,默认级别为Info.

    • 还可以使用修饰器(Decorator)来要求每行日志输出都附加上额外的内容,支持附加在日志行上的信息包括:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      time: 当前时间;
      uptime: 虚拟机启动到现在经过的时间,以秒为单位;
      timemillis: 当前时间毫秒数,相当于System.currentTimeMillis()的输出;
      uptimemillis: 虚拟机启动到现在经过的毫秒数;
      timenanos: 当前时间的纳秒数,相当于System.nanoTime()的输出;
      pid: 进程ID
      tid: 线程ID
      level: 日志级别
      tags: 日志输出的标签集.如果不指定,默认值为uptime,level,tags这三个,此时日志输出类似于以下形式:
      [3.080s][info][gc,cpu] GC(5) User=0.03s Sys=0.00s Real=0.01s

查看GC基本信息

  • 在JDK9之前使用-XX: +PrintGC
  • 在JDK9之后使用-Xlog: gc

查看GC详细信息

  • 在JDK9之前使用-XX: +PrintGCDetails
  • 在JDK9之后使用-Xlog: gc*, 用通配符*将GC标签下所有细分过程都打印出来.

查看GC过程中用户现场并发时间以及停顿的时间

  • 在JDK9之前使用-XX:+PrintGCApplicationConcurrentTime以及-XX: +PrintFCApplicationStoppedTime
  • 在JDK9之后使用-Xlog: safepoint

查看收集器Ergonmics机制自动调节的相关信息

  • Ergonmics机制(自动设置对空间各分代区域大小,收集目标等内容,从Parallel收集器开始支持)

  • 在JDK9之前使用-XX: PrintAdaptiveSizePolicy

  • 在JDK9之后使用-Xlog: gc+ergo*=trace

查看熬过收集后剩余对象的年龄分布信息

  • 在JDK9之前使用-XX: +PrintTenuringDistribution
  • 在JDK9之后使用-Xlog: gc+age=trace

GC事件的类型

  • 一般来说,垃圾收集事件(Garbage Collection events)可以分为三种类型:
    • Minor GC
    • Major GC
    • Full GC

GC日志分析工具