前言

GCEasy是一款非常好用的在线分析GC日志的工具,打开官网,直接上传gc日志,也可以更加上门的要求进行压缩上传。

JVM memory size(jvm内存大小区域)


JVM memory size ,GCEasy展示了年轻代、老年代、元空间。JVM给分配的大小和程序运行过程中使用的峰值大小。

从JVM memory size展示的信息,我们可以判断是否需要做下面的几件事情。

  • 是否需要修改JVM内存(-Xms、-Xmx、-Xmn…)相关配置,比如年轻代和老年代峰值远远小于分配的大小,这个时候我们可以适当的减小内存设置。
  • 是否需要调整年轻代和老年代的比例(-XX:NewSize(-Xns)、-XX:MaxNewSize(-Xmn)、-XX:SurvivorRatio=8)。比如老年大的峰值一直小于老年代申请的内存,这个时候我们可以稍微多分点空间给年轻代。
  • 是否需要修改元空间(XX:MetaspaceSize,-XX:MaxMetaspaceSize)相关设置。
    年轻代,老年代属于堆区,元空间属于非堆区(直接对接的是机器的内存)

Key Performance Indicators(关键性能指标)

Throughput表示的是吞吐量
Latency表示响应时间
Avg Pause GC Time 平均GC时间
Max Pause GC TIme 最大GC时间

Key Performance Indicators 给我们展示了GC吞吐量(应用程序线程用时占程序总用时的比例,越高越好),每次GC的平均耗时(建议控制在50ms以下),GC最长耗时,每个时间段的GC次数及占比信息。

通过Key Performance Indicators显示的信息里面,我们需要关注下面几个问题:

  • 吞吐量,应用花在非GC上的时间百分比(引用花在生产任务上的百分比)。所以吞吐量越高越好。
  • 每次GC的平均耗时。越小越好,建议50ms以下。
  • GC最长耗时。越小越好。如果你的应用是一个后台程序,并且任何请求不超过10秒,那么GC最长耗时就不能超过10秒。

根据内存调优准则,以上这三个优化指标,最多只能三者取其二

  • 如果想要比较好的吞吐量和延迟,就需要在CPU消耗有所牺牲
  • 入股想要比较好的吞吐量和CPU消耗,就需要在延迟上有所牺牲
  • 如果想要比较好的延迟和CPU消耗,就需要在吞吐量上有所牺牲

Interactive Graphs(交互圈)

Interactive Graphs展示了

Heap after GC:GC之后堆的使用情况
Heap before GC:GC之前堆的使用情况
GC Duration:GC持续时间
Reclaimed Bytes:GC回收掉的垃圾对象的内存大小
Young Gen:年轻代堆的使用情况
Old Gen:老年代堆的使用情况
Meta Space:元空间的使用情况
A & P:每次GC的时候堆内存分配和晋升情况。其中红色的线表示每次GC的时候年轻代里面有多少内存(对象)晋升到了老年代。

第一部分是Heap after GC,GC后堆的内存图,堆是用来存储对象的,从图中可以看出,随着GC的进行,垃圾回收器把对象都回收掉了,因此堆的大小逐渐增大。

第二部分是Heap before GC,这是GC前堆的使用率,可以看出随着程序的运行,堆使用率越来越高,堆被对象占用的内存越来越大。

第三部分是GC Duration Time,就是GC持续时间。一个GC事件的发生具有多个阶段,而不同的垃圾回收器又有不同的阶段,这里展示不作细分。这些阶段(例如并发标记,并发清除等)与程序线程一起并发运行,此时不会暂停程序线程。但是某些阶段(例如初始标记,清除等)会暂停整个应用程序,所以此图标描述的仅暂停阶段所花费的时间。

第四部分表示的是GC回收掉的垃圾对象的内存大小。

第五部分表示的是Young Gen,年轻代的内存分配情况。对象都是朝生夕死,年轻代存放的就是刚刚产生的对象,每进行一次GC,都会GC掉很多垃圾对象,剩下的就是右GC Root关联的对象,这些对象会年龄会逐渐增加,达到了一定阈值就会晋升为老年代的对象。可以看到before GC表示的图线随着时间的进行逐渐增大,也就是年轻代中对象越来越多,而GC事件发生后,年轻代中对象就会减少,也就是after GC图线表示的内存变化趋势。


第六部分是Old Gen,表示的是老年代的内存分配情况。细心的读者会发现,为啥一开始before GC的内存大小比after GC的内存分配要少呢?这里得先知道老年代存放的都是年龄大的对象,意思就是经过了多次GC都没有被GC掉的对象,就会晋升为老年代的对象。所以这就解释了为啥after GC内存要比before GC内存要大,因为每次GC过后,都会有年轻代的对象晋升为老年代对象。


第七部分是每次GC的时候堆内存分配和晋升情况。其中红色的线表示每次GC的时候年轻代里面有多少内存(对象)晋升到了老年代。

GC Statistics(GC统计信息)


GC Statistics显示一些GC的统计信息。每种GC总共回收了多少内存、总共用了多长时间、平均时间、以及每种GC的单独统计信息啥的。

Object Stats(对象的一些统计信息)

GC Causes(GC的原因信息)

Memory Leak

由于记录的程序没有内存泄漏,所以这里就没有内存泄漏的日志信息。此处可以诊断8种OOM中的5种(Java堆内存溢出,超出GC开销限制,请求数组大小超过JVM限制,Permgen空间,元空间)。

GC日志分析神器-GCEasy详解相关推荐

  1. log nginx 客户端请求大小_Nginx日志分析和参数详解

    本文档主要介绍Nginx设置日志参数的作用,以及Nginx日志常用分析命令 基本大纲: 1.Nginx日志记录格式的介绍 2.Nginx日志参数详解 3.Web服务流量名词介绍 4.Nginx日志常用 ...

  2. Java性能分析神器-JProfiler详解(一)

    前段时间在给公司项目做性能分析,从简单的分析Log(GC log, postgrep log, hibernate statitistic),到通过AOP搜集软件运行数据,再到PET测试,感觉时间花了 ...

  3. 在线GC日志分析工具——GCeasy

    1.GCeasy 地址:gceasy 2.模拟堆内存不足 2.1代码引入 jvm配置 -Xms60m -Xmx60m -XX:SurvivorRatio=8 -XX:+PrintGCDetails - ...

  4. nginx服务器access_log日志分析及配置详解

    本博客转载于:http://www.pythontab.com/html/2013/linuxkaiyuan_0104/96.html nginx的log日志分为access log 和 error ...

  5. nginx服务器查看日志文件,nginx服务器中access_log日志分析与配置详解

    前言 nginx的log日志分为:access log 和 error log 其中access log 记录了哪些用户,哪些页面以及用户浏览器.ip和其他的访问信息 error log 则是记录服务 ...

  6. JVM性能优化之GC日志分析

    JVM性能优化之GC日志分析 文章目录 JVM性能优化之GC日志分析 前言 一.GC日志参数 GC日志参数 常用的垃圾收集器配置 大对象回收 二.GC日志分析工具 GCeasy JVM memory ...

  7. java8 GC日志分析

    @[toc] 前言 最近学习分析了一下java8的GC日志,顺便记录下来,忘性太大了 背景: java version "1.8.0_144" Java(TM) SE Runtim ...

  8. Linux系统与网络、磁盘参数和日志监控等命令详解二

    创作人QQ:851301776,邮箱:lfr890207@163.com, 欢迎大家一起技术交流,本博客主要是自己学习的心得体会,只为每天进步一点点! 个人座右铭: 1.没有横空出世,只要厚积一定发. ...

  9. JVM-07垃圾收集Garbage Collection【GC日志分析】

    文章目录 概述 GC格式 实例 GC监控 安装GC可视化插件 启动本地进程,监控和分析GC情况 GC日志分析工具 概述 每一种收集器的日志形式都是由他们自身的实现决定的,也就是说每个收集器的日志格式都 ...

最新文章

  1. SqlSessionFactoryBean的构建流程
  2. Android应用开发:动画和Fragment
  3. Dockerfile实战之部署python网站
  4. windows下mysql(解压版)安装教程
  5. js 对 URL 参数进行 加密 解密
  6. 一块电路板从“出生”到“成年”
  7. 20165234 《Java程序设计》第五周学习总结
  8. VC6 Win7 x64 提示 Remote Executable path And File Name
  9. ROS2的学习笔记(legacy)
  10. 【BZOJ1179】[Apio2009]Atm/抢掠计划
  11. zynq开发系列6:创建AXI IP实现PS对PL的数据配置(步骤三配置SDK)
  12. Android——TextView属性XML详解
  13. 历时半载,我的新课上线了
  14. python 结巴分词学习
  15. MATLAB | 老版本也能用,默认设置让简单的代码画出炫酷的图像
  16. NOI题库答案(1.1 编程基础之输入输出)
  17. W801单片机学习笔记——内部结构,总线架构篇
  18. 表格相对引用和绝对引用及相互切换(复制单元格函数公式保持不变)
  19. 5.3 使用数据结构对真实世界建模
  20. 使用Proteus软件制作温控风扇电路仿真

热门文章

  1. android kotlin扩展添加域名
  2. 方格网提取高程点lisp_LSP 程序说明
  3. 大学物理稳恒电场——恒定电流
  4. 基于IC617下Layout XL的使用
  5. 如何招到一个靠谱的程序员,以及如何应对面试题
  6. 软件测试行业能干的多少岁?是不是真的只能干到35.....
  7. JAVA spring hessian_Springboot写的Hessian例子
  8. Linux中如何启动redis服务
  9. 第十二讲 dom对象(DOM对象、document对象的常用方法、节点、查找结点、 查看/修改/删除属性节点、创建和增加节点)
  10. 医院网络部绩效考核指标具体方案