快速解读GC日志

文章转载自:http://blog.csdn.net/renfufei/article/details/49230943
本文是 Plumbr 发行的 Java垃圾收集指南 的部分内容。文中将介绍GC日志的输出格式, 以及如何解读GC日志, 从中提取有用的信息。我们通过 -XX:+UseSerialGC 选项,指定JVM使用串行垃圾收集器, 并使用下面的启动参数让 JVM 打印出详细的GC日志:

-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
这样配置以后,发生GC时输出的日志就类似于下面这种格式(为了显示方便,已手工折行):

2015-05-26T14:45:37.987-0200: 151.126:
[GC (Allocation Failure) 151.126:
[DefNew: 629119K->69888K(629120K), 0.0584157 secs]
1619346K->1273247K(2027264K), 0.0585007 secs]
[Times: user=0.06 sys=0.00, real=0.06 secs]

2015-05-26T14:45:59.690-0200: 172.829:
[GC (Allocation Failure) 172.829:
[DefNew: 629120K->629120K(629120K), 0.0000372 secs]
172.829: [Tenured: 1203359K->755802K(1398144K), 0.1855567 secs]
1832479K->755802K(2027264K),
[Metaspace: 6741K->6741K(1056768K)], 0.1856954 secs]
[Times: user=0.18 sys=0.00, real=0.18 secs]
上面的GC日志暴露了JVM中的一些信息。事实上,这个日志片段中发生了 2 次垃圾回收事件(Garbage Collection events)。其中一次清理的是年轻代(Young generation), 而第二次处理的是整个堆内存。下面我们来看,如何解读第一次GC事件,发生在年轻代中的小型GC(Minor GC):

2015-05-26T14:45:37.987-02001:151.1262:[GC3(Allocation Failure4)
151.126: [DefNew5:629119K->69888K6(629120K)7
, 0.0584157 secs]1619346K->1273247K8(2027264K)9,0.0585007 secs10]
[Times: user=0.06 sys=0.00, real=0.06 secs]11

2015-05-26T14:45:37.987-0200 – GC事件(GC event)开始的时间点.
151.126 – GC时间的开始时间,相对于JVM的启动时间,单位是秒(Measured in seconds).
GC – 用来区分(distinguish)是 Minor GC 还是 Full GC 的标志(Flag). 这里的 GC 表明本次发生的是 Minor GC.
Allocation Failure – 引起垃圾回收的原因. 本次GC是因为年轻代中没有任何合适的区域能够存放需要分配的数据结构而触发的.
DefNew – 使用的垃圾收集器的名字. DefNew 这个名字代表的是: 单线程(single-threaded), 采用标记复制(mark-copy)算法的, 使整个JVM暂停运行(stop-the-world)的年轻代(Young generation) 垃圾收集器(garbage collector).
629119K->69888K – 在本次垃圾收集之前和之后的年轻代内存使用情况(Usage).
(629120K) – 年轻代的总的大小(Total size).
1619346K->1273247K – 在本次垃圾收集之前和之后整个堆内存的使用情况(Total used heap).
(2027264K) – 总的可用的堆内存(Total available heap).
0.0585007 secs – GC事件的持续时间(Duration),单位是秒.
[Times: user=0.06 sys=0.00, real=0.06 secs] – GC事件的持续时间,通过多种分类来进行衡量:
user – 此次垃圾回收, 垃圾收集线程消耗的所有CPU时间(Total CPU time).
sys – 操作系统调用(OS call) 以及等待系统事件的时间(waiting for system event)
real – 应用程序暂停的时间(Clock time). 由于串行垃圾收集器(Serial Garbage Collector)只会使用单个线程, 所以 real time 等于 user 以及 system time 的总和.
通过上面的分析, 我们可以计算出在垃圾收集期间, JVM 中的内存使用情况。在垃圾收集之前, 堆内存总的使用了 1.54G (1,619,346K)。其中, 年轻代使用了 614M(629,119k)。可以算出老年代使用的内存为: 967M(990,227K)。

下一组数据( -> 右边)中蕴含了更重要的结论, 年轻代的内存使用在垃圾回收后下降了 546M(559,231k), 但总的堆内存使用(total heap usage)只减少了 337M(346,099k). 通过这一点,我们可以计算出, 有 208M(213,132K) 的年轻代对象被提升到老年代(Old)中。

这个GC事件可以用下面的示意图来表示, 上方表示GC之前的内存使用情况, 下方表示结束后的内存使用情况:

这里写图片描述

如果你想学习更多, 请查看完整的 Java垃圾收集指南, 本示例是从其中抽取的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HBase meta元数据损坏导致hbase master初始化失败

故障起因: 跑kylin任务,过程出错,异常信息:Direct buffer memory, java.io.IOException: java.lang.OutOfMemoryError: Direct buffer memoryat org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.ha…

HBase shell执行批量脚本

场景描述: HBase namespace中有大量无用的小表,占用了过多的block,需要批量删除,了解了一下有两种方式: 1、使用通配符 用drop命令可以删除表。在删除一个表之前必须先将其禁用。 hbase(main):018:0> disable em…

时间序列分析综述

一.基本分类 1.单变量的传统时间序列分析 2.单变量的随机时间序列分析 3.多变量的时间序列分析 建立在回归基础上的两变量序列分析 建立在AR基础上的多变量序列分析 4.截面时序数据结合的分析 转载于:https://www.cnblogs.com/xyp666/p/9220667.html

Ubuntu开启允许root用户远程登录

SSH服务器,可以通过SSH协议来访问远程服务器,代替telnet和ftp。但是ubuntu默认是不启用root用户也不允许root远程登录的。所以需要先启用root用户 1、启用root用户: 第一步 sudo passwd root //修改密码 第二步: vim /usr…

补码(为什么按位取反再加一):告诉你一个其实很简单的问题(转自醍醐灌顶)...

首先,阅读这篇文章的你,肯定是一个在网上已经纠结了很久的读者,因为你查阅了所有你能查到的资料,然后他们都会很耐心的告诉你,补码:就是按位取反,然后加一。准确无误,毫无破绽。但是…

Kettle报错:Entry to update with following key could not be found

问题描述: 一个转换对一个表进行插入操作,第一次查询然后插入数据,但是有些字段需要特殊处理下,也就是要先插入主要的信息,然后针对这个记录根据刚才生成的id进行更新操作,在开发环境上测试没问题&#xf…

IntrospectorCleanupListener作用

https://www.cnblogs.com/qiankun-site/p/5886673.html 1、此监听器主要用于解决java.beans.Introspector导致的内存泄漏的问题 2、此监听器应该配置在web.xml中与Spring相关监听器中的第一个位置(也要在ContextLoaderListener的前面)3、JDK中的java.beans.Introspector类的用途…

CentOS安装Oracle12C

文章转载: https://www.howtoforge.com/tutorial/how-to-install-oracle-database-12c-on-centos-7/

7-2 幼儿园数学题(29 分)

我系渣渣辉,我在梦工厂等你,是兄弟就来砍我啊!! 刚上幼儿园的渣渣辉迷上了一款名叫贪玩蓝月的新游戏,由于过于沉迷游戏,上课听讲的效率直线下降。 今天,他的数学老师给他布置了一道求解二元一次…

PLSQL中文显示乱码(问号)

1、输入 select * from V$NLS_PARAMETERS 查看第一行value值是否为简体中文 simplified chinese 实际显示为:AMERICAN 2、设置本地环境变量 :NLS_LANG NLS_LANGAMERICAN_AMERICA.ZHS16GBK NLS_LANG的值为三个划线值拼接而成。 3、重新打开PLSQL…

python2精确除法

python2和python3除法的最大区别: python2: print 500/1000 python2结果:取整数部分,小数并没有保留 0Process finished with exit code 0 python3: print 500/1000 python3结果:得到真实结果,小数保留 0.5Process finished with exit code 0 那么,如果python2想保留小数部分,要…

vim 中代码的折叠和打开

文章转载自:http://liufabin66688.blog.163.com/blog/static/13968548200810140486304/ 仅用于个人学习备查收藏。 在查看代码的时候,如果代码十分冗长,尤其是c/c系列的时候, 代码结构比较让人难以理清,主要是各种注…

WGCNA | weighted correlation network analysis

早就接触过这个包了,只是一直畏惧,以为很复杂,也没有应用场景,所以认识很肤浅。 现在有应用场景了,我自己开发了一个幼稚的版本,发现了很多需求,后来想起了WGCNA似乎部分解决了我的问题&#xf…

CentOS7安装Oracle11g R2全过程

安装过程主要参考: 1、https://www.howtoforge.com/tutorial/how-to-install-oracle-database-12c-on-centos-7/ 2、http://www.cnblogs.com/sonnychen/p/5366021.html 3、 https://www.jianshu.com/p/57e3e6ad81ef 遇到的问题: 1、安装完KDE&…

Mybatis下collections使用pageHelper进行分页

pageHelper在对mybatis一对多分页时造成查询总页数结果不对的情况。 可以做出如下修改&#xff1a; service层&#xff1a; public CommonResult worksList(String userId, int page, int pageSize) throws Exception { PageHelper.startPage(page, pageSize); List<…

使用Kylin导入JDBC数据源遇到的问题

一、目标&#xff1a; 直接使用Mysql数据作为Kylin数据源 二、参考官方配置 JDBC 数据源 准备 Sqoop Kylin 使用 Apache Sqoop 从关系型数据库加载数据到 HDFS。在与 Kylin 同一个机器上下载并安装最新版本的 Sqoop。我们使用 SQOOP_HOME 环境变量指出在本指南中 Sqoop 的安…

php 通过array_merge()和array+array合并数组的区别和效率比较

众所周知合并两个数组可以使用array_merge()&#xff0c;这是php提供的一个函数。另外还可以通过 array 的方式来合并数组&#xff0c;这两种直接有什么区别&#xff0c;哪一个的效率更高呢&#xff1f; array_merge() 格式&#xff1a; array array_merge ( array … ] ) 注意…

解决ubuntu系统root用户下Chrome无法启动问题

说明&#xff1a;本文转载自-https://www.cnblogs.com/hbsygfz/p/8409517.html 由于ubuntu16.04系统自带的是Firefox浏览器&#xff0c;需要安装Chrome浏览器&#xff0c;但是在root用户下安装后发现&#xff0c;Chrome无法正常启动。安装及问题解决具体如下&#xff1a; 1. …

mysql ERROR 1045 和2058时(28000): 错误解决办法

mysql ERROR 1045 (28000): 错误解决办法 听语音|浏览&#xff1a;54286|更新&#xff1a;2018-02-23 14:34|标签&#xff1a;mysql 1234567分步阅读ERROR 1045 (28000): Access denied for user ODBClocalhost (using password: NO) ERROR 1045 (28000): Access denied for us…

Hive设置参数-指定引擎-队列

文章转载&#xff1a;https://www.cnblogs.com/huangmr0811/p/5571001.html Hive提供三种可以改变环境变量的方法&#xff0c;分别是&#xff1a;&#xff08;1&#xff09;、修改${HIVE_HOME}/conf/hive-site.xml配置文件&#xff1b;&#xff08;2&#xff09;、命令行参数&…