Java GC 日志解析
JVM 在Java应用程序优化中是不可缺少的一大重项,如何合理配置Java参数,如果验证配置参数的有效性,从GC日志中可以获得很重要的提示,以下是笔者对GC垃圾收集器默认开启的组合日志的部分的解析,希望能帮到想学习的同学O(∩_∩)O~~
工具/原料
- jdk1.6
- -XX:+PrintGCDetails
- XX:+PrintGCTimeStamps
- -Xloggc:filename
- glassfish
方法/步骤
- 1
Hotspot JVM GC 垃圾收集器的默认默认开启的组合为:

- 2
使用GC日志命令行选项为:
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-Xloggc:<filename>
- 3
JVM 【-server】
glassfish应用服务器 -server 启动 垃圾收集器默认组合方式为
新生代:Parallel Scavenge 并行回收GC
年老代和持久代:Parallel Old并行GC
- 4
GC日志打印信息:
-XX:+PrintGCTimeStamps输出格式:
289.556: [GC [PSYoungGen: 314113K->15937K(300928K)] 405513K->107901K(407680K), 0.0178568 secs] [Times: user=0.06 sys=0.00, real=0.01 secs]
293.271: [GC [PSYoungGen: 300865K->6577K(310720K)] 392829K->108873K(417472K), 0.0176464 secs] [Times: user=0.06 sys=0.00, real=0.01 secs]
详解:
293.271是从jvm启动直到垃圾收集发生所经历的时间,GC表示这是一次Minor GC(新生代垃圾收集);[PSYoungGen: 300865K->6577K(310720K)] 提供了新生代空间的信息,PSYoungGen,表示新生代使用的是多线程垃圾收集器Parallel Scavenge。300865K表示垃圾收集之前新生代占用空间,6577K表示垃圾收集之后新生代的空间。新生代又细分为一个Eden区和两个Survivor区,Minor GC之后Eden区为空,6577K就是Survivor占用的空间。
括号里的310720K表示整个年轻代的大小。
392829K->108873K(417472K),表示垃圾收集之前(392829K)与之后(108873K)Java堆的大小(总堆417472K,堆大小包括新生代和年老代)
由新生代和Java堆占用大小可以算出年老代占用空间,如,Java堆大小417472K,新生代大小310720K那么年老代占用空间是417472K-310720K=106752k;垃圾收集之前老年代占用的空间为392829K-300865K=91964k 垃圾收集之后老年代占用空间108873K-6577K=102296k.
0.0176464 secs表示垃圾收集过程所消耗的时间。
[Times: user=0.06 sys=0.00, real=0.01 secs] 提供cpu使用及时间消耗,user是用户模式垃圾收集消耗的cpu时间,实例中垃圾收集器消耗了0.06秒用户态cpu时间,sys是消耗系统态cpu时间,real是指垃圾收集器消耗的实际时间。
- 5
-XX:+PrintGCDetails输出格式:
293.289: [Full GC [PSYoungGen: 6577K->0K(310720K)]
[PSOldGen: 102295K->102198K(134208K)] 108873K->102198K(444928K)
[PSPermGen: 59082K->58479K(104192K)], 0.3332354 secs]
[Times: user=0.33 sys=0.00, real=0.33 secs]
说明:
Full GC表示执行全局垃圾回收
[PSYoungGen: 6577K->0K(310720K)] 提供新生代空间信息,解释同上
[PSOldGen: 102295K->102198K(134208K)]提供了年老代空间信息;
108873K->102198K(444928K)整个堆空间信息;
[PSPermGen: 59082K->58479K(104192K)]提供了持久代空间信息;
- 6
JVM【-client】
glassfish应用服务器 默认 -client启动 垃圾收集器默认组合方式为
新生代:Serial串行GC (新生代使用-XX:+UseSerialGC收集器)
年老代和持久代:Serial Old 串行GC
- 7
GC日志打印信息:
-XX:+PrintGCTimeStamps输出格式:
9.007: [GC 9.007: [DefNew: 13526K->1060K(14400K), 0.0041350 secs] 44692K->32226K(46108K), 0.0041767 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
9.259: [GC 9.259: [DefNew: 13924K->1089K(14400K), 0.0042760 secs] 45090K->32650K(46108K), 0.0043143 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]
说明:
DefNew表示新生代使用Serial串行GC垃圾收集器,defNew提供新生代空间信息;
DefNewGeneration 就是 default new generation
- 8
-XX:+PrintGCDetails输出格式:
9.348: [GC 9.348: [DefNew: 13953K->976K(14400K), 0.0040943 secs]9.352: [Tenured: 32163K->32220K(32220K), 0.1182207 secs] 45514K->32338K(46620K), [Perm : 30467K->30467K(65536K)], 0.1224318 secs] [Times: user=0.12 sys=0.00, real=0.13 secs]
DefNew:表示新生代使用Serial串行GC垃圾收集器,defNew提供新生代空间信息;
Tenured:提供年老代空间信息;
45514K->32338K(46620K):整个堆空间大小信息;
Perm :提供持久代空间信息;
Java GC 日志解析的更多相关文章
- Java GC 日志详解(转)
Java GC日志可以通过 +PrintGCDetails开启 以ParallelGC为例 YoungGC日志解释如下(图片源地址:这里) : FullGC(图片源地址:这里): http://blo ...
- Java GC 日志详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt105 java GC日志可以通过 +PrintGCDetails开启 以Pa ...
- Java GC 日志输出分析
搜到的几篇讲GC日志的文章,学到了很多东西.但是有些错误或者不够精确的地方. 因此自己尝试着总结一下. 先写个程序,然后结合程序解释每句话的意思. 运行参数 -Xms200M -Xmx200M -Xm ...
- Java GC日志查看
Java GC类型 Java中的GC有哪几种类型? 参数 描述 UseSerialGC 虚拟机运行在Client模式的默认值,打开此开关参数后, 使用Serial+Serial Old收集器组合进行垃 ...
- 【GC分析】Java GC日志查看
Java中的GC有哪几种类型? 参数 描述 UseSerialGC 虚拟机运行在Client模式的默认值,打开此开关参数后, 使用Serial+Serial Old收集器组合进行垃圾收集. UsePa ...
- 理解Java GC日志
idea 在vm options处加入-XX:+PrintGCDetails,可打印GC日志. public class ReferenceCountingGC { public Object ins ...
- java crach 日志解析
在java开发中,或许会出现如下错误,这种错误大多出现在开发中涉及本地代码的地方. ## A fatal error has been detected by the Java Runtime Env ...
- java gc日志详解
从 Full GC 信息可知,新生代可用的内存大小约为 18M,则新生代实际分配得到的内存空间约为 20M(为什么是 20M? 请继续看下面...).老年代分得的内存大小约为 42M,堆的可用内存的大 ...
- Java GC日志
JVM 命令:-Xms5m -Xmx20m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseSerialGC [GC (Allocatio ...
随机推荐
- 深入JavaScript模块化编程
今天看requirejs官网的manual,发现了下面这篇好文章,于是花点时间翻译了一下,翻译不好的地方请指正,谢谢! 推荐阅读原文:) http://www.adequatelygood.com ...
- linux文本文件按列合并
http://blog.163.com/liang8421@126/blog/static/894819572009386653912/ 我想把文本文件file1 和文本文件 file2按照相应的行合 ...
- java 中 SVN 设置所有文件及子目录 needs-lock, svn 提交时自动设置 needs-lock, 及版本不一致问题
摘自: http://my.oschina.net/zhangzhihao/blog/72177 设置后的效果:文件会自动带上svn:needs-lock属性,默认是只读的要签出才能修改以防止修改完后 ...
- beyond compare 比较Xls文件时只显示有差异的列
beyond compare是专业级的文件比较工具,可以比较所有的文件格式,已经成为我工作中的必备软件 在某一个工作项目中需要比较两个Xls文件,两个文件列是相同的,主要是看两个文件的列内容有什么变化 ...
- 【中英】mac电脑清理软件 ToolWiz Mac Boost
简单介绍: ToolWiz Mac Boost是一款适用于Mac电脑清理加速最好的终极应用, 使您的Mac电脑干净有条理, 执行飞速且稳定.始终保持最佳状态! ToolWiz Mac Boost 运用 ...
- 更简单更全的material design状态栏
从实际使用须要出发,以最简单的方式实现了几种类型的MD状态栏. (重点在fitsSystemWindows的使用) 0,使用前提 Theme.AppCompat.Light.DarkActionBar ...
- Think Pad T410键盘溅水有惊无险
昨日不小心单位给配的T410溅水了,由于水不多,用餐巾纸擦干后就晾起来了. 大概过了6小时,心想现在该好了吧,于是按开机键,无效! 当时暗骂Thinkpad给LX做坏了,一点小水都挡不住,还敢号称防洒 ...
- Jquery重新学习之八[Ajax运用总结B]
上一篇简单介绍普通javascript以及Jquery的AJAX方法,其中Jquery.ajax()是功能比较强悍的底层方法,可以更多地关注实现过程中的细节:除Jquery.ajax()方法外,Jqu ...
- Java 同步器
CyclicBarrier是什么 CyclicBarrier也叫同步屏障,在JDK1.5被引入,可以让一组线程达到一个屏障时被阻塞,直到最后一个线程达到屏障时,所以被阻塞的线程才能继续执行.Cycli ...
- CentOS 开机启动
# vim /etc/rc.local 加入你想在开机后执行的脚本 source /etc/profile /usr/local/xx.sh 写第一句是想保证在执行脚本前系统环境变量有效,第二句才是真 ...