Java GC 日志解析
JVM 在Java应用程序优化中是不可缺少的一大重项,如何合理配置Java参数,如果验证配置参数的有效性,从GC日志中可以获得很重要的提示,以下是笔者对GC垃圾收集器默认开启的组合日志的部分的解析,希望能帮到想学习的同学O(∩_∩)O~~
工具/原料
- jdk1.6
- -XX:+PrintGCDetails
- XX:+PrintGCTimeStamps
- -Xloggc:filename
- glassfish
方法/步骤
Hotspot JVM GC 垃圾收集器的默认默认开启的组合为:
- 使用GC日志命令行选项为:
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-Xloggc:<filename>
- JVM 【-server】
glassfish应用服务器 -server 启动 垃圾收集器默认组合方式为
新生代:Parallel Scavenge 并行回收GC
年老代和持久代:Parallel Old并行GC
- 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是指垃圾收集器消耗的实际时间。
- -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)]提供了持久代空间信息;
- JVM【-client】
glassfish应用服务器 默认 -client启动 垃圾收集器默认组合方式为
新生代:Serial串行GC (新生代使用-XX:+UseSerialGC收集器)
年老代和持久代:Serial Old 串行GC
- 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
- -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 :提供持久代空间信息;
原文参考:https://jingyan.baidu.com/article/3ea51489c045d852e61bbaab.html
转载于:https://blog.51cto.com/tenderrain/2054499
Java GC 日志解析相关推荐
- Java GC 日志详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt105 java GC日志可以通过 +PrintGCDetails开启 以Pa ...
- java 程序执行后 强制gc_【GC系列】JVM的常用GC参数及GC日志解析
今天继续GC系列第三篇,熬夜不易,欢迎一键三连,给个鼓励,不点赞也没关系,我还可以,谢谢捧场[捂脸]. 常见垃圾回收器组合设定 在oracle官网上可以看到如何开启使用指定垃圾回收的命令: https ...
- java gc日志乱码_6000+字,30+张图。JAVA线上故障排查全套路总结。
fredalxin|https://sourl.cn/duWZhd 线上故障主要会包括 cpu.磁盘.内存以及 网络 问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次 ...
- Java GC日志查看和分析
GC日志查看 javaGC日志查看可以通过在java命令种加入参数来指定对应的gc类型,打印gc日志信息并输出至文件等策略. -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetai ...
- java gc日志乱码_gc原理以及gc日志剖析
gc原理以及gc日志 一.概述 学习Java的我们都知道垃圾收集(gc),大部分人把这项技术当作是java语言的伴生产物.事实上,gc的历史比Java久远,1960年诞生于MIT的Lisp是第一门真正 ...
- Java无法输出gc日志_【GC分析】Java GC日志查看
Java中的GC有哪几种类型? 参数 描述 UseSerialGC 虚拟机运行在Client模式的默认值,打开此开关参数后, 使用Serial+Serial Old收集器组合进行垃圾收集. UsePa ...
- 带你读懂Java GC日志信息 教你如何使用工具查看【图文演示】
文章目录 一.常见参数列表 二.设置参数位置 三.参数设置演示 四.日志补充说明 五.工具查看日志 一.常见参数列表 1.目的:通过阅读GC日志,我们可以了解Java虛拟机内存分配与回收策略. 2.内 ...
- java gc日志乱码_让bug无处藏身,Java 线上问题排查思路、常用工具
本文总结了一些常见的线上应急现象和对应排查步骤和工具.分享的主要目的是想让对线上问题接触少的同学有个预先认知,免得在遇到实际问题时手忙脚乱. 公--主--号: 我的名称"java小白学心理& ...
- java gc日志乱码_Java中9种常见的CMS GC问题分析与解决(四)
目前,互联网上 Java 的 GC 资料要么是主要讲解理论,要么就是针对单一场景的 GC 问题进行了剖析,对整个体系总结的资料少之又少.前车之鉴,后事之师,美团的几位工程师历时一年多的时间,搜集了内部 ...
最新文章
- angular-创建自定义的指令
- PAT (Basic Level) 1073 多选题常见计分法(恶心模拟)
- leetcode 224. 基本计算器(栈)
- LINUX之网络编程j简述
- Mysql学习总结(37)——Mysql Limit 分页查询优化
- 解决IIS数据库连接出错方法
- 计算机及服务器硬件组成结合企业运维场景知识
- Nvidia控制面板选择默认独显后黑屏的解决方法
- 深入理解JVM虚拟机1:JVM内存的结构与消失的永久代
- 关于PMSM的弱磁与MTPA结合控制超详细分析
- python 正则匹配中re.match().group(num=0)
- 判断推理---逻辑判断
- ES2015中let的暂时性死区(TDZ)
- 高考倒计时100天,用python看看高三党
- mac_m4a转mp3
- 那些仰望星空的人们,《三体》中看见区块链的未来
- 几个有关智能的小问题
- 百度收录技巧有哪些?2022百度文章收录技巧大全
- java调接口实现发送手机短信验证码功能,手机验证码,接口调用
- 「镁客早报」世界产权组织称:2018年国际专利申请华为排名第一;微软股价大涨,市值超9000亿美元...