十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
今天小编给大家分享一下gc日志实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
创新互联公司是一家集成都网站设计、网站制作、网站页面设计、网站优化SEO优化为一体的专业网络公司,已为成都等多地近百家企业提供网站建设服务。追求良好的浏览体验,以探求精品塑造与理念升华,设计最适合用户的网站页面。 合作只是第一步,服务才是根本,我们始终坚持讲诚信,负责任的原则,为您进行细心、贴心、认真的服务,与众多客户在蓬勃发展的市场环境中,互促共生。
-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日志实例分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注创新互联行业资讯频道。