• JVM分析GC日志


    1、GC日志参数

    -verbose:gc //输出gc日志信息,默认输出到标准输出
    -XX:+PrintGC //输出GC日志。类似:-verbose:gc
    -XX:+PrintGCDetails //在发生垃圾回收时打印内存回收相处的日志, 并在进程退出时输出当前内存各区域分配情况
    -XX:+PrintGCTimeStamps //输出GC发生时的时间戳
    -XX:+PrintGCDateStamps 输出GC发生时的时间戳(以日期的形式,例如:2013-05-04T21:53:59.234+0800
    -XX:+PrintHeapAtGC// 每一次GC前和GC后,都打印堆信息

     

    -Xloggc:<file> //表示把GC日志写入到一个文件中去,而不是打印到标准输出中

    2、GC日志格式

    1. [GC (Allocation Failure) [PSYoungGen: 18944K->2528K(18944K)] 30757K->30427K(62976K), 0.0036557 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
    2. [Full GC (Ergonomics) [PSYoungGen: 2528K->0K(18944K)] [ParOldGen: 27899K->30149K(44032K)] 30427K->30149K(62976K), [Metaspace: 3160K->3160K(1056768K)], 0.0042183 secs] [Times: user=0.01 sys=0.01, real=0.00 secs]

    2.1  [GC(Allocation Failure)

    发生了一次垃圾回收,这是一次Minior GC。它不区分新生代还是老年代GC,括号里的内容是gc发生的原因,这里的Allocation Failure的原因是新生代中没有足够区域能够存放需要分配的数据而失败

    2.2、[PSYoungGen:76800K->8433K(89600K)

    PSYoungGen:表示GC发生的区域,区域名称与使用的GC收集器是密切相关的

    Serial收集器:Default New Generation 显示Defnew

    ParNew收集器:ParNew

    Parallel Scanvenge收集器:PSYoung

    老年代和新生代同理,也是和收集器名称相关

    76800K->8433K(89600K):GC前该内存区域已使用容量->GC后盖区域容量(该区域总容量)

    如果是新生代,总容量则会显示整个新生代内存的9/10,即eden+from/to区

    如果是老年代,总容量则是全身内存大小,无变化

    76800K->8449K(294400K)

    在显示完区域容量GC的情况之后,会接着显示整个堆内存区域的GC情况:GC前堆内存已使用容量->GC后堆内存容量(堆内存总容量),并且堆内存总容量 = 9/10 新生代 + 老年代,然后堆内存总容量肯定小于初始化的内存大小

    [Times:user=0.02 sys=0.01,real=0.01 secs]

    user:指CPU工作在用户态所花费的时间

    sys:指CPU工作在内核态所花费的时间

    real:指在此次事件中所花费的总时间

    ,0.0088371

    整个GC所花费的时间,单位是秒

    Full GC(Metadata GCThreshold):

    括号中是gc发生的原因,原因:Metaspace区不够用了。

    除此之外,还有另外两种情况会引起Full GC,如下:

    1、Full GC(FErgonomics)

    原因:JVM自适应调整导致的GC

    2、Full GC(System)

    原因:调用了System.gc()方法

    [PSYoungGen: 100082K->0K(89600K)]

    PSYoungGen:表示GC发生的区域,区域名称与使用的GC收集器是密切相关的

    Serial收集器:Default New Generation 显示DefNew

    ParNew收集器:ParNew

    Parallel Scanvenge收集器:PSYoungGen

    老年代和新生代同理,也是和收集器名称相关

    ParOldGen:32K->9638K(204800K)

    老年代区域没有发生GC,因此本次GC是metaspace引起的

    [Meatspace:20158K->20156K(1067008K)],

    metaspace GC 回收2K空间

    3、GC日志分析工具

    4、GC分类

    4.1、FGC GC回收新生代和老年代,也有概述是整堆收集

    4.2、YGC GC 回收新生代

    4.3、触发GC

    1>老年代空间不足

    2>方法区空间不足

    3>显示调佣System.gc()

    4>Minior GC进入老年代的数据的平均大小 大于 老年代的可用内存()

    5>大对象直接进入老年代。老年代空间不足

  • 相关阅读:
    拼图小游戏
    JavaWeb基础
    【DesignMode】单例模式(singleton pattern)
    C# WPF入门学习主线篇(三十三)—— 使用ICommand实现命令绑定
    Azure DevOps Pipelines部署.Net Core 应用到Kubernetes
    MySQL之InnoDB的锁类型与锁原理
    手机实时预览vscode写的html页面
    UNIAPP实战项目笔记32 购物车无商品默认样式
    flutter tabbar设置文字背景,不延时
    【附源码】计算机毕业设计JAVA宠物店管理系统
  • 原文地址:https://blog.csdn.net/CB_Beginner/article/details/127097808