zoukankan      html  css  js  c++  java
  • Java打开GC日志

    环境: JDK1.8
     
    打开GC日志:

    -verbose:gc
    

    这个只会显示总的GC堆的变化, 如下:

    [GC (Allocation Failure)  80832K->19298K(227840K), 0.0084018 secs]
    [GC (Metadata GC Threshold)  109499K->21465K(228352K), 0.0184066 secs]
    [Full GC (Metadata GC Threshold)  21465K->16716K(201728K), 0.0619261 secs]
    

    参数解析:

    GC, Full GC, GC的类型, GC只在新生代上进行, Full GC包括永生代, 新生代, 老年代。

    Allocation Failure: GC发生的原因。

    80832K->19298K: 堆在GC前的大小和GC后的大小。

    228840k: 现在的堆大小。

    0.0084018 secs: GC持续的时间。

     
    但是如果想查看更详细的信息, 比如新生代在GC前后的变化或者老年代在GC前后的变化等, 就需要打开另一个开关:

    -XX:+PrintGCDetails
    

    现在的命令就变成了 -verbose:gc -XX:+PrintGCDetails, 然后输出的信息如下:

    [GC (Allocation Failure) [PSYoungGen: 70640K->10116K(141312K)] 80541K->20017K(227328K), 0.0172573 secs] [Times: user=0.03 sys=0.00, real=0.02 secs] 
    [GC (Metadata GC Threshold) [PSYoungGen: 98859K->8154K(142336K)] 108760K->21261K(228352K), 0.0151573 secs] [Times: user=0.00 sys=0.01, real=0.02 secs] 
    [Full GC (Metadata GC Threshold) [PSYoungGen: 8154K->0K(142336K)] [ParOldGen: 13107K->16809K(62464K)] 21261K->16809K(204800K), [Metaspace: 20599K->20599K(1067008K)], 0.0639732 secs] [Times: user=0.14 sys=0.00, real=0.06 secs]
    

    参数解析:

    GC, Full FC: 同样是GC的类型

    Allocation Failure: GC原因

    PSYoungGen: 使用了Parallel Scavenge并行垃圾收集器的新生代GC前后大小的变化

    ParOldGen: 使用了Parallel Old并行垃圾收集器的老年代GC前后大小的变化

    Metaspace: 元数据区GC前后大小的变化, JDK1.8中引入了元数据区以替代永生代, 因为永生代大小固定不能动态调整, 所以有弊端。

    xxx secs: 指GC花费的时间

    Times: user指的是垃圾收集器花费的所有CPU时间, sys, 花费在等待系统调用或系统事件的时间, real: GC从开始到结束的时间, 包括其他进程占用时间片的时间。

     
    加上GC时间:

    -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps
    

    那么命令就变成了:

    -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps
    

    输出就变成了:

    2019-09-24T22:15:24.518+0800: 3.287: [GC (Allocation Failure) [PSYoungGen: 136162K->5113K(136192K)] 141425K->17632K(222208K), 0.0248249 secs] [Times: user=0.05 sys=0.00, real=0.03 secs] 
    2019-09-24T22:15:25.559+0800: 4.329: [GC (Metadata GC Threshold) [PSYoungGen: 97578K->10068K(274944K)] 110096K->22658K(360960K), 0.0094071 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
    2019-09-24T22:15:25.569+0800: 4.338: [Full GC (Metadata GC Threshold) [PSYoungGen: 10068K->0K(274944K)] [ParOldGen: 12590K->13564K(56320K)] 22658K->13564K(331264K), [Metaspace: 20590K->20590K(1067008K)], 0.0494875 secs] [Times: user=0.17 sys=0.02, real=0.05 secs]
    

    可见带上了时间和日期。

     
    如果想把GC日志存到文件的话, 是下面这个参数:

    -Xloggc:/path/to/gc.log
    

    然后就可以用一些工具去分析这些gc日志。

     

    Refer: https://www.baeldung.com/java-verbose-gc

  • 相关阅读:
    6-[多线程]-互斥锁、GIL、死锁、递归锁、信号量
    5-[多线程]-线程理论
    4-1 多进程练习题
    压缩与解压缩
    检测SSL证书很好用的三个网站
    shell之sort和uniq 及wc 的使用
    shell之cut和tr 的命令的使用
    三剑客之awk数组实战
    三剑客之sed
    linux文件查找(find,locate)
  • 原文地址:https://www.cnblogs.com/helloz/p/11582101.html
Copyright © 2011-2022 走看看