专栏首页技术趋势jvm-问题分析及优化利器-gceasy的使用

jvm-问题分析及优化利器-gceasy的使用

什么是gceasy?

gceasy是一个网站 :https://gceasy.io/ 主要为分析gc日志,形成可视化的报表快速排查问题使用。并且可以推荐jvm优化的配置(当然这块收费了!!!)。

官网介绍:

通用GC 日志分析器

业内首款借助机器学习技术引导的垃圾回收日志分析工具。GCeasy 内置有智能功能,可自动检测 JVM 和 Android GC 日志中的问题并推荐解决方案。

  • 仅需几秒钟即可解决内存和 GC 问题
  • 获取 JVM 堆内存设置建议
  • 获取 JVM 堆内存设置建议 上传 GC 日志文件
  • 深受 4,000+ 企业信赖

gceasy的使用

打开网站:https://gceasy.ycrash.cn/

首先我们需要通过项目生成的log文件进行提交上传,那么这里使用的的代码是死锁的代码来尝试

package com.jvm.oom;

import java.util.ArrayList;
import java.util.List;

class OOMObject {
    public byte[] placeholder = new byte[64 * 1024];

    public static void fillHeap(int num) throws InterruptedException {
        List<OOMObject> list = new ArrayList<OOMObject>();
        for (int i = 0; i < num; i++) {
// 稍作延时,令监视曲线的变化更加明显
            Thread.sleep(50);
            list.add(new OOMObject());
        }
        System.gc();
    }

    public static void main(String[] args) throws Exception {
        fillHeap(1000);
    }

}

通过运行日志进行分析(GCeasy支持)

配置启动项(不懂可以看之前的文章)

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/Users/csh/hong.log

启动配置:

通过手动Jump进行分析(GCeasy不支持)

csh@chenshuhongdeMacBook-Pro ~ % jps
10080 RemoteMavenServer36
10530 Launcher
10531 OOMObject
10536 Jps
10043 
csh@chenshuhongdeMacBook-Pro ~ % jmap -dump:file=/Users/csh/hong.dump 10531
Dumping heap to /Users/csh/hong.dump ...

通过异常退出生成的jump文件进行分析(GCeasy不支持)

通过配置+HeapDumpOnOutOfMemoryError和HeapDumpPath 当系统异常的时候可以获取到对应的dump文件。

-XX:+HeapDumpOnOutOfMemoryError -Xms20m -Xmx20m -XX:HeapDumpPath=/Users/csh

运行程序后会生成如下:

(貌似这种错误和jump出来的 easy都不支持~,算是一种分析问题的操作吧,暂时不删除了~)

通过以上生成的log然后上传到gceasy,这里发现用中文的版本可以免费获取到分析的推荐配置参数,不知道是随机还是只有中文有,大家可以切换到中文版尝试尝试~

结果分析:

GCeasy还是比较人性化的,可以分享和将报告下载下来分析;重点是这个建议:提示如何进行优化这个还是很给力气,所有的其他功能我们都可以通过jdk自带的工具实现,唯一这里的推荐就是这个平台的一大利器,不过听说英文版开始收费了~所以想用的同学尽快上学,说不定将来也都收费了~

JVM内存大小

那上面这块就是分析出来具体你的jvm的年轻代和老年代,元空间及总合,这里就不多说什么,不清楚的同学可以看看我前面的文章~(元空间

关键性能指标

从上面可以看到两个指标,一个是平均停顿时间,一个是最大停顿时间,一般我们一次GC在80ms以内都算是优秀了,正常几百ms也有,不过如果这个值很大,几千那就要注意了是不是频繁fullgc 要看下面的老年代gc了,或者这个值分配不均匀那更要注意了是不是代码里面有大对象直接进入老年代或者代码方面引起的问题。

交互图表

注意这里的GC后的堆情况,如果你拿到的日志非常大,发现你的堆一直在往上增加,那就证明你的代码有一些对象一直往老年代里面存放,并且不删除,导致老年代内存占用空间一直越来越大,一般正常情况下是每次gc完会有一个减少的情况,如果是前面说的这种就要注意了,你可能就是内存快溢出了就是常说的OOM(这个demo就是oom)

从这张图可以看到下面如果gc持续的时间有异常或者说很大超过1s或者有时高有时低,那就要注意了~

可以看到每次gc回收的字节数,仅供参考。

可以从图中看到每次younggc之前、之后以及gc释放的数量。

可以从图中看到每次younggc之前、之后以及gc释放的数量。

老年代回收前后回收后的情况,如果这里一直在增加,就要注意喽~

元空间,jdk8后去除永久代改为元空间,就是直接内存,这块要注意下是否越占越大,因为内存也是会满的~

可以从这里看到对象分配大小以及回收的大小~

GC统计数据

GC的总次数:Total GC count ;

Minorgc次数:Minor GC count;

Full GC次数:Full GC Count;

GC导致停顿次数:Pause Count;

当然了,各项指标可以详细去了解,不一一列举,那么这张图可以干什么呢?第一可以看到具体每次gc次数,特别注意full gc ,其次看到停顿次数及停顿时间,如果这里太明显了,那么就要针对性来分析了~

对象数据

方便参考值

这个功能就好用了,可以直接看出来有没有内存泄漏,如果有的话直接提示在这里了。~

上面这些作为参考的数据,比如JVM参数配置,这块可以看出来你的jvm配置有没有生效,其次你的GC原因可以看出你具体是拓展空间的gc或者是程序的gc等等~

最后

其实GCeasy大部分功能我们都可以通过Jdk自带的bin目录中获取实现,GCeasy只是在这些基础上进行封装成图形化界面,让我们一眼可以看懂很多系统的指标和分析问题,但是GCeasy最强大的莫过于推荐配置这块功能,可以提供我们参数的配置,减少我们大量尝试的时间,所以这块真的太给力了,有时候为了优化频繁的fullgc或者分析一些代码引发的问题找半天,但是通过GCeasy可以很清晰分析出来是代码还是业务量增加的导致的需要优化,当然了GCeasy后续也开始收费了,所以各位有钱的同学或公司可以付费参与我觉得也是可以减少大量的分析时间也挺值。(不过各大云平台貌似都有免费的功能)

文章分享自微信公众号:
技术趋势

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:逍遥壮士
原始发表时间:2022-05-14
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • jvm-日志分析工具gcviewer的使用

    GCViewer是一个小工具,可以可视化Sun / Oracle、IBM、HP和BEA Java虚拟机生成的详细GC输出。它是在GNU LGPL下发布的...

    逍遥壮士
  • JVM故障分析及性能优化实战(III)——jstat命令的使用及VM Thread分析

    前面提到了一个使用jstack的shell脚本,通过命令可以很快地定位到指定线程对应的堆栈信息。

    IT技术小咖
  • Android Studio Profiler Memory (内存分析工具)的简单使用及问题

    Memory Profiler 是 Android Studio自带的内存分析工具,可以帮助开发者很好的检测内存的使用,在出现问题时,也能比较方便的分析定位问题...

    看书的小蜗牛
  • BIGO 使用 Flink 做 OLAP 分析及实时数仓的实践和优化

    BIGO 是一家面向海外的以短视频直播业务为主的公司, 目前公司的主要业务包括 BigoLive (全球直播服务),Likee (短视频创作分享平台),IMO ...

    从大数据到人工智能
  • Java问题排查分享

    最近翻看以前写的 PPT, 发现了在2019年做的一次技术分享,关于 Java 问题排查,由于没什么公司机密可言,整理下分享给大家~

    龟仙老人
  • 关于Socket高并发的原理介绍及使用Apache Mina带来线上的问题分析

    上周在线上出现了一个很低级的问题,但是正是这个低级的问题引起了我的兴趣,其实所谓的低级是因为配置文件配置错了,原本线上是为每个客户端设置了一个席位,就说是客户端...

    用户1257215
  • GC日志分析工具-GCeasy解析

    一款新的GC日志分析仪器,业界首个基于人工智能机器学习指导的垃圾收集日志分析工具。 GCeasy具有内置的智能功能,可以自动检测JVM和Andro...

    Luga Lee
  • JVM故障分析及性能优化实战(VII)——使用MAT的Histogram和Dominator Tree定位溢出源

    上一篇文章概括的介绍了JVM Heap Dump文件生成的方式以及内存分析工具MAT的概要功能,今天讲解如何使用MAT的Histogram和Dominator ...

    IT技术小咖
  • JVM故障分析及性能优化实战(VI)——JVM Heap Dump(堆转储文件)的生成和MAT的使用

    正如Thread Dump文件记录了当时JVM中线程运行的情况一样,Heap Dump记录了JVM中堆内存运行的情况。 可以通过以下几种方式生成Heap Dum...

    IT技术小咖
  • 记一次真实的JVM性能调优过程

    最近对负责的项目进行了一次性能优化,其中包括对 JVM 参数的调整,算是进行了一次简单的 JVM 调优,JVM 参数调整之后,服务的整体性能有 5% 左右的提升...

    北游
  • 一次简单的 JVM 调优,拿去写到简历里

    点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 |...

    芋道源码
  • 一次简单的 JVM 调优,性能提升了15%

    最近对负责的项目进行了一次性能优化,其中包括对 JVM 参数的调整,算是进行了一次简单的 JVM 调优,JVM 参数调整之后,服务的整体性能有 15% 左右的提...

    java进阶架构师
  • 如何减少长时间的 GC 停顿?

    长时间的 GC 停顿对应用程序是不利的,它会影响服务的 SLA,进而导致糟糕的用户体验,并对核心应用程序的服务造成严重损害。因此,在本文中,我列出了导致长时间 ...

    用户1516716
  • Java应用性能调优之详解System的gc垃圾回收方法

    System.gc()是用Java,C#和许多其他流行的高级编程语言提供的API。当它被调用时,它将尽最大努力从内存中清除垃圾(即未被引用的对象)。名词解释:G...

    Java_老男孩
  • 面试题:如何减少长时间的 GC 停顿?

    长时间的 GC 停顿对应用程序是不利的,它会影响服务的 SLA,进而导致糟糕的用户体验,并对核心应用程序的服务造成严重损害。因此,在本文中,我列出了导致长时间 ...

    搜云库技术团队
  • 如何减少长时间的 GC 停顿?

    长时间的 GC 停顿对应用程序是不利的,它会影响服务的 SLA,进而导致糟糕的用户体验,并对核心应用程序的服务造成严重损害。因此,在本文中,我列出了导致长时间 ...

    涤生
  • 一次线上JVM Young GC调优,搞懂了这么多东西!

    首先我们使用 jstat 查看了 GC 的情况。又通过查看GC log,分析了GC 的详细状况。

    用户7927337
  • 知道如何优化垃圾回收机制吗?

    在 Java 开发中,开发人员是无需过度关注对象的回收与释放的,JVM 的垃圾回收机制可以减轻不少工作量。但完全交由 JVM 回收对象,也会增加回收性能的不确定...

    田维常
  • [三步法] 可视化分析定位线上 JVM 问题

    前提是线上 JVM 配置了以下参数: [题外话:JDK 版本 1.6,现在大部分互联网企业应用系统应该是 1.8 以上了吧 ]

    IT技术小咖

扫码关注腾讯云开发者

领取腾讯云代金券