JVM(三)-垃圾收集器日志分析
参考文献
- 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)
- JEP 158: Unified JVM Logging
- Tools Reference
- Java HotSpot VM Options
垃圾收集器日志
-
HotSpot 所有功能的日志都收归到了
-Xlog
参数1
Xlog[:[selector][:[output][:[decorators][:output-options
-
命令行中最关键的参数是选择器(Selector),它由标签(Tag)和日志级别 (Level)共同组成.标签可理解为虚拟机中某个功能模块的名字,它告诉日志框架用户希望得到虚拟机哪些功能的日志输出。垃圾收集器的标签名称为“gc”,由此可见,垃圾收集器日志只是 HotSpot 众多功能日志的其中一项,全部支持的功能模块标签名如下所示
1
2add,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
10time: 当前时间;
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日志分析工具
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HoleLin's Blog!