JVM-实战篇-GC调优

发布时间 2023-12-29 15:57:52作者: DAYTOY-105

1 GC调优

  • GC调优指的是对垃圾回收进行调优。GC调优的主要目标是避免由垃圾回收引起的程序性能下降。
  • GC调优的核心分为三部分:
  1. 通过JVM参数的设置;
  2. 特定垃圾回收器的JVM参数的设置;
  3. 解决由频繁的FULLGC引起的程序性能问题。
  • GC调优没有唯一的标准答案,重点学习调优的工具和方法。

2 GC调优的核心指标

2.1 吞吐量

  • 分类:业务吞吐量垃圾回收吞吐量
  • 业务吞吐量:指的是在一段时间内,程序需要完成的业务数量。eg:在晚上8点到10点,支持用户查询500000条商品信息。
  • 垃圾回收吞吐量:指的是CPU用于执行用户代码的时间与CPU总执行时间的比值。吞吐量越高,垃圾回收的效率就越高。
  • 保证高吞吐量的常规手段有两条:
    • 优化业务执行性能,减少单次业务的执行时间;
    • 优化垃圾回收吞吐量。

2.2 延迟

  • 概念延迟指的是从用户发起一个请求到收到响应这其中经历的时间。eg:所有的请求必须在5秒内返回给用户结果;
  • 延迟 = GC延迟 + 业务执行时间,所以如果GC时间过长,会影响到用户的使用。

2.3 内存使用量

  • 概念:内存使用量指的是Java应用占用系统内存的最大值,一般通过JVM参数调整,在满足上述两个指标的前提下,这个值越小越好。

3 GC调优的方法

发现问题 - jstat工具

  • jstat工具是JDK自带的一款监控工具,可以提供各种垃圾回收、类加载、编译信息等不同的数据;
  • 使用方法为:jstat -gc 进程ID 每次统计的间隔(毫秒) 统计次数

发现问题 - visualvm插件

  • VisualVm提供了一款Visual Tool插件,实时监控Java进程的堆内存结构、变化趋势以及垃圾回收时间的变化趋势。

发现问题 - Prometheus + Grafana

  • Prometheus用来采集系统或者应用的相关数据,同时具备告警功能;
  • Grafana可以将Prometheus采集到的数据以可视化的方式进行展示。

解决GC问题的手段

  • 优化基础JVM参数;
  • 减少对象产生;
  • 更换垃圾回收器;
  • 优化垃圾回收器参数。

4 案例实战

5 总结

GC调优的核心流程:

  1. 监控是否出现连续的FULL GC或者单次GC时间过长;
  2. 诊断并解决,一般通过四种途径解决:
    • 优化基础JVM参数;
    • 减少对象的产生;
    • 更换垃圾回收器;
    • 优化垃圾回收参数;

    3.在测试环境验证问题是否已经解决,最后发布上线。