JVM实践篇—Arthas高效的监控工具

350 阅读2分钟

梳理几个容易混淆的概念

graph TD;
    Start(开始) --> CheckYoungGen[检查新生代]
    CheckYoungGen -->|需要| PerformYoungGC[执行Young GC]
    CheckYoungGen -->|不需要| CheckOldGen[检查老年代]
    PerformYoungGC --> CheckOldGen
    CheckOldGen -->|需要| PerformMixedGC[执行Mixed GC]
    CheckOldGen -->|不需要| CheckFullGC[是否需要Full GC?]
    PerformMixedGC --> CheckFullGC
    CheckFullGC -->|需要| PerformFullGC[执行Full GC]
    CheckFullGC -->|不需要| End(结束)
    PerformFullGC --> CheckOOM[检查是否 OOM]
    CheckOOM -->|是| End
    CheckOOM -->|否| End

MinorGC、YoungGC、FullGC OldGC、MajorGC、MixedGC

image.png ◆第一组:MinorGC vs YoungGC

两者等价的, 新生代和年轻代也是一回事,当Eden区 占满之后触发对年轻代的垃圾回收

image.png

在G1之前的垃圾回收器里,两者是等价的,都是老年代被 占满之后触发对老年代的垃圾回收 在G1里不等价,G1里的Full GC是将新生代、老年代和永 久代等全部空间进行垃圾回收,显然包含的范围更广

G1的三种垃圾回收方式三种方式分别是什么含义?

新生代回收(YGC):只回收新生代区域,代价低/频率高

混合回收(MxGC):回收全部新生代+部分老年代,频率一般。

完全回收(FullGO):全部堆空间,代价高/频率低,系统距崩溃不远了。

image.png

image.png

G1 Garbage Collection Modes Sequence Diagram

Young GC (Minor GC)

  • 触发时机:
    • 新生代(Eden 区、Survivor 区)快要满了
  • 操作:
    • 清理 Eden 区和 Survivor 区
  • 输出:
    • 年轻代被清理,对象被移动到老年代或者 Survivor 区

Mixed GC

  • 触发时机:
    • 新生代快要满了
    • 老年代也达到了一定的阈值
    • G1 垃圾回收器认为需要进行混合回收(通常在多次 Young GC 后)
  • 操作:
    • 清理 Eden 区、Survivor 区以及部分老年代
  • 输出:
    • 年轻代和部分老年代被清理

Full GC

  • 触发时机:
    • 老年代几乎满了,且无法再通过 Mixed GC 或 Young GC 来获得足够的空间
    • 发生几次 Full GC 仍然无法回收足够的内存
    • 用户程序显式调用(如 System.gc()
  • 操作:
    • 清理整个堆(包括老年代和新生代)
  • 输出:
    • 整个堆被清理
    • 如果还是不能回收足够的内存,将抛出 OOM(Out of Memory)

image.png

image.png

大对象

image.png

Arthas 使用教程

Arthas是一款强大的Java诊断工具,用于监测和诊断Java应用程序的性能问题。本教程将为您介绍Arthas的基本命令和操作,以及如何使用它来监控线上服务的内存状态、载入的类信息、方法执行情况等。

1. Arthas 简介

  • Arthas概述
  • 特点和优势

2. 基础命令与操作

  • 启动Arthas
  • 查找类和方法
  • 设置断点
  • 查看变量和堆栈信息

3. 监控线上服务的内存状态

  • 查看内存使用情况
  • 监控对象实例数量
  • 分析内存泄漏

4. 监控载入的类信息

  • 查看正在加载的类
  • 查看类加载器信息
  • 查看类的层次结构

5. 追踪方法的执行情况

  • 跟踪方法入参和出参
  • 计算方法耗时
  • 诊断性能问题

6. 轻松绘制火焰图

  • 火焰图简介
  • 生成火焰图步骤
  • 解读火焰图结果

7. 总结与进一步学习

  • 本章总结
  • 推荐学习资源