jvm-47-jvm GC 日志获取方式+可视分析化工具 GcViewer

王柳  论坛元老 | 2024-12-3 19:34:41 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1024|帖子 1024|积分 3072

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
拓展阅读

JVM FULL GC 生产问题 I-多线程通用实现
JVM FULL GC 生产问题 II-如何定位内存泄漏? 线程通用实现
JVM FULL GC 生产问题 III-多线程执行队列的封装实现,进一步抽象
jvm-44-jvm 内存性能分析工具 Eclipse Memory Analyzer Tool (MAT) / 内存分析器 (MAT)
jvm-45-jvm dump 文件内存介绍+获取方式+堆内存可视分析化工具
jvm-46-jvm Thread Dump 线程的堆栈跟踪信息+获取方式+可视分析化工具 FastThread
jvm-47-jvm GC 日志获取方式+可视分析化工具 GcViewer
jvisualvm java 性能分析工具
是什么?

Java 的垃圾回收(GC)日志提供了关于 JVM 垃圾回收过程的具体信息。
这些日志对于性能调优和分析垃圾回收举动至关告急。
通过 GC 日志,开发者可以了解堆内存的利用情况、垃圾回收的频率、每次 GC 的时间等信息,资助排查内存泄漏、性能瓶颈等问题。
如何得到 GC 日志?

在 Java 8 之前,启用 GC 日志需要设置 -XX:+PrintGCDetails 和 -XX:+PrintGCDateStamps 等 JVM 参数。
从 Java 9 开始,JVM 提供了同一的 GC 日志格式,可以通过 -Xlog:gc 启用日志记录。
Java 8 之前的方式:

  1. -XX:+PrintGCDetails -XX:+PrintGCDateStamps
复制代码
Java 9 及之后的方式:

  1. -Xlog:gc*:file=gc.log
复制代码
常见 GC 日志参数


  • -XX:+PrintGCDetails
    打印具体的 GC 信息,包罗每个垃圾回收周期的范例、堆的利用情况、GC 前后的堆状态等。
  • -XX:+PrintGCDateStamps
    打印 GC 时间戳,资助你确定垃圾回收的发生时间。
  • -XX:+PrintGCTimeStamps
    记录垃圾回收的时间戳。
  • -XX:+PrintHeapAtGC
    每次 GC 发生时,打印堆的具体信息(如堆内存巨细、利用的内存等)。
  • -XX:+PrintGCApplicationStoppedTime
    打印应用步伐停顿的时间,尤其是在发生 Stop-the-World 的 GC 时,能够资助定位性能瓶颈。
  • -XX:+PrintTenuringDistribution
    打印年轻代到老年代的对象晋升分布,了解对象的生命周期和对象晋升的时机。
GC 日志的分析

GC 日志中的常见输出字段

GC 日志包含多个告急的字段,每个字段对应着不同的 GC 细节,以下是一些常见的字段及其含义:

  • GC 事件范例
    常见的 GC 范例包罗:

    • Minor GC:年轻代垃圾回收
    • Full GC:包罗年轻代和老年代垃圾回收,通常需要进行 Stop-the-World 操作
    • Mixed GC:G1 垃圾回收器的一种范例,涉及年轻代和部分老年代回收

  • 时间戳
    每次 GC 事件的时间。
  • 堆的巨细

    • Young Generation(年轻代)
    • Old Generation(老年代)
    • Permanent Generation(永久代,Java 8 之后被元空间(Metaspace)替代)

  • GC 前后的堆内存状态
    GC 前后的堆利用情况:包罗每个代(年轻代、老年代、元空间)的内存巨细、已利用内存和最大内存。
  • GC 停顿时间

    • Pause Time:GC 期间应用步伐的停顿时间
    • Application Time:应用步伐执行的时间,通常用于计算总的停顿时间与应用步伐的执行时间比例。

  • GC 执行时间
    每次 GC 的执行时间。例如:
    1. [GC (Allocation Failure)  [PSYoungGen: 2048K->512K(3072K)] 1024K->512K(4096K), 0.0012345 secs]
    复制代码
示例日志

假设在利用 G1 垃圾回收器时,GC 日志的输出大概如下所示:
  1. 2024-11-28T08:00:00.001+0000: 0.001: [GC pause (young) (G1 Evacuation Pause) (mixed) 3124M->1024M(4096M), 0.0034567 secs]
  2. 2024-11-28T08:00:00.004+0000: 0.004: [GC pause (young) (G1 Evacuation Pause) (mixed) 2048M->1024M(4096M), 0.0023456 secs]
复制代码
其中:


  • 2024-11-28T08:00:00.001+0000: 表示 GC 事件发生的时间。
  • 3124M->1024M(4096M): 表示 GC 之前年轻代占用的内存是 3124M,GC 后为 1024M,堆总内存是 4096M。
  • 0.0034567 secs: GC 执行的时间。
可视化工具

下面是对上述 GC 日志可视化分析工具的简明对比表格:
工具名称支持的 GC 日志格式特点是否免费利用方式GCViewerJava 6 及以上开源,支持多种 GC 日志格式,提供具体的 GC 图表分析免费下载并运行Censum (JClarity)Java 8 及以上商业工具,主动生成陈诉,深度分析 GC 停顿和内存利用情况付费上传日志文件FastThreadJava 8 及以上在线工具,快速分析 GC 日志,主动生成陈诉和图表免费在线上传日志GCEasy.ioJava 8 及以上在线工具,提供具体的 GC 分析陈诉,支持 G1、CMS 等免费(有高级功能付费)在线上传日志VisualVMJava 6 及以上官方工具,集成 GC 日志分析、内存分析、线程监控等免费下载并运行XRebel GC ViewerJava 8 及以上提供易于理解的图表和 GC 陈诉,支持停顿时间和内存利用分析免费(有高级功能付费)在线上传日志JFR + JMC (Oracle)Java 8 及以上官方工具,提供高效的性能分析,适用于生产情况免费JDK 内建,设置并运行 小结

希望本文对你有所资助,假如喜欢,欢迎点赞收藏转发一波。
我是老马,期待与你的下次相遇。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王柳

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表