gc日志实例分析

发布时间:2022-03-17 15:50:15 作者:iii
来源:亿速云 阅读:194

今天小编给大家分享一下gc日志实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

-XX:+PrintGC 输出简要GC日志

-XX:+PrintGCDetails 输出详细GC日志

-Xloggc:gc.log  输出GC日志到文件

-XX:+PrintGCTimeStamps 输出GC的时间戳(以JVM启动到当期的总时长的时间戳形式)

-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)

-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息

-verbose:gc

-XX:+PrintReferenceGC 打印年轻代各个引用的数量以及时长

-XX:+PrintGC与-verbose:gc

[GC (Allocation Failure)  61805K->9849K(256000K), 0.0041139 secs]

1、GC 表示是一次YGC(Young GC)

2、Allocation Failure 表示是失败的类型

3、68896K->5080K 表示年轻代从68896K降为5080K

4、256000K表示整个堆的大小

5、0.0041139 secs表示这次GC总计所用的时间

在JDK 8中,-verbose:gc是-XX:+PrintGC一个别称,日志格式等价与:-XX:+PrintGC,。

不过在JDK 9中 -XX:+PrintGC被标记为deprecated。

-XX:+PrintGCDetails

[GC (Allocation Failure) [PSYoungGen: 53248K->2176K(59392K)] 58161K->7161K(256000K), 0.0039189 secs] [Times: user=0.02 sys=0.01, real=0.00 secs]

1、GC 表示是一次YGC(Young GC)

2、Allocation Failure 表示是失败的类型

3、PSYoungGen 表示年轻代大小

4、53248K->2176K 表示年轻代占用从53248K降为2176K

5、59392K表示年轻带的大小

6、58161K->7161K 表示整个堆占用从53248K降为2176K

7、256000K表示整个堆的大小

8、 0.0039189 secs 表示这次GC总计所用的时间

9、[Times: user=0.02 sys=0.01, real=0.00 secs] 分别表示,用户态占用时长,内核用时,真实用时。

时间保留两位小数,四舍五入。

-XX:+PrintGCTimeStamps

1.963: [GC (Allocation Failure) 61805K->9849K(256000K), 0.0041139 secs]

如果加上-XX:+PrintGCTimeStamps那么日志仅仅比1.1介绍的最前面多了一个时间戳: 1.963, 表示从JVM启动到打印GC时刻用了1.963秒。

-XX:+PrintGCDateStamps

2019-03-05T16:56:15.108+0800: [GC (Allocation Failure) 61805K->9849K(256000K), 0.0041139 secs]

如果加上-XX:+PrintGCDateStamps那么日志仅仅比1.1介绍的最前面多了一个日期时间: 2019-03-05T16:56:15.108+0800, 表示打印GC的时刻的时间是2019-03-05T16:56:15.108+0800。+0800表示是东8区。

-XX:+PrintHeapAtGC

invocations 表示GC的次数,每次GC增加一次,每次GC前后的invocations相等

1、Heap before GC invocations=1 表示是第1次GC调用之前的堆内存状况

2、{Heap before GC invocations=1 (full 0): 表示是第1次GC调用之后的堆内存状况

-XX:+PrintReferenceGC

此设置 -XX:+PrintReferenceGC可以打印出SoftReference,WeakReference,FinalReference,PhantomReference,JNI Weak Reference几种引用的数量,以及清理所用的时长,该参数在进行YGC调优时可以排上用场。

CMS GC日志详细分析

[GC (CMS Initial Mark) [1 CMS-initial-mark: 19498K(32768K)] 36184K(62272K), 0.0018083 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]

[CMS-concurrent-mark-start]

[CMS-concurrent-mark: 0.011/0.011 secs] [Times: user=0.02 sys=0.00, real=0.00 secs]

[CMS-concurrent-preclean-start]

[CMS-concurrent-preclean: 0.001/0.001 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]

[CMS-concurrent-abortable-preclean-start]

CMS: abort preclean due to time [CMS-concurrent-abortable-preclean: 0.558/5.093 secs] [Times: user=0.57 sys=0.00, real=5.09 secs]

[GC (CMS Final Remark) [YG occupancy: 16817 K (29504 K)][Rescan (parallel) , 0.0021918 secs][weak refs processing, 0.0000245 secs][class unloading, 0.0044098 secs][scrub symbol table, 0.0029752 secs][scrub string table, 0.0006820 secs][1 CMS-remark: 19498K(32768K)] 36316K(62272K), 0.0104997 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]

[CMS-concurrent-sweep-start]

[CMS-concurrent-sweep: 0.007/0.007 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]

[CMS-concurrent-reset-start]

[CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

33.125: [GC  [DefNew: 4310K->872K(37888K),0.0025925 secs] 4310K->880K(123904K), 0.0009434 secs]

100.667: [Full GC [Tenured: 4310K->872K(37888K),0.0149142 secs] 4310K->880K(123904K), 0.0150007 secs] [Times: user=0.01 sys=0.00, real=0.02 secs]

1,前面的数字“33.125:” 和 “100.667:”代表了GC发生的时间,这个数字的含义是从java虚拟机启动以来经过的秒数。

2, GC日志开头的“[GC”和“[Full GC” 说明了这次垃圾收集的停顿类型,而不是用来区分新生代GC和老年代GC的,如果有“Full”,说明这次GC是发生了Stop-The-World的,如果调用System.gc()方法所触发的收集,那么在这里将显示“[Full GC (System.gc()”。

3,“[DefNew:”、“[Tenured:”、“[Perm:” 表示GC发生的区域,这里显示的区域名成与使用的GC收集器是密切相关的;如果使用Serial收集器中的新生代名为“Default New Generation”,所以显示“[DefNew:”;如果使用ParNew收集器,新生代名称会变为“[ParNew:”,意为“Parallel New Generation”;如果使用Parallel Scavenge收集器,那它配套的新生代称为“PSYoungGen”。,

4, 后面的括号内部的“4310K->872K(37888K)”含义是“GC前该内存区域已使用容量–>GC后该内存区域已使用容量(该内存区域总容量)”

“0.0025925 secs” 表示该内存区域GC所占用的时间,单位秒。

5,方括号之外的“4310K->880K(123904K)”表示“GC前java堆已使用容量”–>“GC后java堆的已使用容量(java堆总容量)”

“0.0009434 secs”表示该java堆中GC所占用的时间,单位秒。

以上就是“gc日志实例分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

推荐阅读:
  1. 【译】深入理解G1的GC日志(一)
  2. JAVA中GC日志的相关知识有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

gc

上一篇:java类文件的知识点有哪些

下一篇:虚拟机性能监控和故障处理的工具有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》