【JVM虚拟机】GC日志样例解读

近期查看产品日志,看到如下GC日志,收集整理如下

Tomcat垃圾回收日志(tomcat-gc*.log)

2019-09-29T06:01:00.041+0800: 1310458.865: [GC (Allocation Failure) 2019-09-29T06:01:00.041+0800: 1310458.866: [ParNew: 366307K->2255K(386880K), 0.0214515 secs] 1016409K->652361K(1369920K), 0.0227310 secs] [Times: user=0.15 sys=0.00, real=0.02 secs]
Heap after GC invocations=4674 (full 3):
 par new generation   total 386880K, used 2255K [0x00000000ab000000, 0x00000000c4000000, 0x00000000c4000000)
  eden space 364160K,   0% used [0x00000000ab000000, 0x00000000ab000000, 0x00000000c13a0000)
  from space 22720K,   9% used [0x00000000c13a0000, 0x00000000c15d3c00, 0x00000000c29d0000)
  to   space 22720K,   0% used [0x00000000c29d0000, 0x00000000c29d0000, 0x00000000c4000000)
 concurrent mark-sweep generation total 983040K, used 650106K [0x00000000c4000000, 0x0000000100000000, 0x0000000100000000)
 Metaspace       used 386387K, capacity 391928K, committed 392064K, reserved 1390592K
  class space    used 49137K, capacity 50188K, committed 50304K, reserved 1048576K
}
{Heap before GC invocations=4674 (full 3):
 par new generation   total 386880K, used 366415K [0x00000000ab000000, 0x00000000c4000000, 0x00000000c4000000)
  eden space 364160K, 100% used [0x00000000ab000000, 0x00000000c13a0000, 0x00000000c13a0000)
  from space 22720K,   9% used [0x00000000c13a0000, 0x00000000c15d3c00, 0x00000000c29d0000)
  to   space 22720K,   0% used [0x00000000c29d0000, 0x00000000c29d0000, 0x00000000c4000000)
 concurrent mark-sweep generation total 983040K, used 650106K [0x00000000c4000000, 0x0000000100000000, 0x0000000100000000)
 Metaspace       used 386387K, capacity 391928K, committed 392064K, reserved 1390592K
  class space    used 49137K, capacity 50188K, committed 50304K, reserved 1048576K

TODO:结合如下内容对上述日志进行解读

参考外网的解读
[GC (Allocation Failure) [ParNew: 367523K->1293K(410432K), 0.0023988 secs] 522739K->156516K(1322496K), 0.0025301 secs] [Times: user=0.04 sys=0.00, real=0.01 secs]

字段 说明
GC 表明进行了一次垃圾回收,前面没有Full修饰,表明这是一次Minor GC,注意它不表示只GC新生代,并且现有的不管是新生代还是老年代都会STW(Stop the World。
Allocation Failure: 表明本次引起GC的原因是因为在年轻代中没有足够的空间能够存储新的数据了。
ParNew 表明本次GC发生在年轻代并且使用的是ParNew垃圾收集器。ParNew是一个Serial收集器的多线程版本,会使用多个CPU和线程完成垃圾收集工作(默认使用的线程数和CPU数相同,可以使用-XX:ParallelGCThreads参数限制)。该收集器采用复制算法回收内存,期间会停止其他工作线程,即Stop The World。
367523K->1293K(410432K) GC前该内存区域(这里是年轻代)使用容量,GC后该内存区域使用容量,该内存区域总容量。
0.0023988 secs 该内存区域GC耗时,单位是秒
522739K->156516K(1322496K) 三个参数分别为:堆区垃圾回收前的大小,堆区垃圾回收后的大小,堆区总大小。
0.0025301 secs 该内存区域GC耗时,单位是秒
[Times: user=0.04 sys=0.00, real=0.01 secs] 分别表示用户态耗时,内核态耗时和总耗时
  • 分析下可以得出结论:
    该次GC新生代减少了367523-1293=366239K
    Heap区总共减少了522739-156516=366223K
    366239 – 366223 =16K,说明该次共有16K内存从年轻代移到了老年代,可以看出来数量并不多,说明都是生 命周期短的对象,只是这种对象有很多。

原文地址:https://www.cnblogs.com/clarino/p/11609553.html

时间: 2024-10-08 17:42:48

【JVM虚拟机】GC日志样例解读的相关文章

jvm的GC日志分析 [转]

jvm的GC日志分析 标签: jvm内存javagc 2015-06-22 16:37 1566人阅读 评论(1) 收藏 举报  分类: Java(4)  JVM的GC日志的主要参数包括如下几个: -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详细日志 -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式) -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:5

jvm之gc日志

ava GC日志可以通过 +PrintGCDetails开启 以ParallelGC为例 YoungGC日志解释如下 FullGC: 原文地址:https://www.cnblogs.com/igoodful/p/9381343.html

深入理解JVM——虚拟机GC

对象是否存活 Java的GC基于可达性分析算法(Python用引用计数法),通过可达性分析来判定对象是否存活.这个算法的基本思想是通过一系列"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时(图论称之为不可达),则证明此对象是不可用的. 无论引用计数法,还是可达性分析都离不开"引用"的概念.Java将引用分为四种(强引用.软引用,弱引用,虚引用),这四种引用强度依次逐渐减弱. s

JVM理论:(二/4)理解GC日志、垃圾收集器参数总结

JVM的GC日志的主要参数包括如下几个: -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详细日志 -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式) -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800) -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息 -XX:+PrintGCApplicationStoppedT

JVM调优日志解析分析与性能监控工具

一.调优参数设置 JVM的GC日志的主要参数包括如下几个: -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详细日志 -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式) -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800) -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息 -XX:+PrintGCApplicatio

GC日志格式及分析、heapdump文件获取

==仅方便后续参考== GC日志配置 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:servers/%SERVER_NAME%_gc.log -XX:+HeapDumpOnOutOfMemoryError注意,%SERVER_NAME%是win格式,linux下为${SERVER_NAME}. JVM的GC日志的主要参数包括如下几个:-XX:+PrintGC 输出简单GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:

GC日志

JVM的GC日志的主要参数包括如下几个: -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详细日志 -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式) -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800) -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息 -Xloggc:../logs/gc.log 日志文件的输出路

JVM优化 垃圾回收 算法 垃圾收集器 GC日志可视化查看

今日内容了解什么是垃圾回收掌握垃圾会回收的常见算法学习串行.并行.并发.G1垃圾收集器学习GC日志的可视化查看 1.什么是垃圾回收?程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存 资源,最终将导致内存溢出,所以对内存资源的管理是非常重要了. 1.1.C/C++语言的垃圾回收在C/C++语言中,没有自动垃圾回收机制,是通过new关键字申请内存资源,通过delete 关键字释放内存资源.如果,程序员在某些位置没有写delete进行释放,那么申请的对象将一直占用内存资源,

快速解读GC日志(转)

本文是 Plumbr 发行的 Java垃圾收集手册 的部分内容.文中将介绍GC日志的输出格式, 以及如何解读GC日志, 从中提取有用的信息.我们通过 -XX:+UseSerialGC 选项,指定JVM使用串行垃圾收集器, 并使用下面的启动参数让 JVM 打印出详细的GC日志: -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps 这样配置以后,发生GC时输出的日志就类似于下面这种格式(为了显示方便,已手工折行): 20