GC 日志分析

GC 日志分析

1. GC 日志分析指南

1.1 GC 日志配置参数

GC日志基础配置
-XX:+PrintGCDetails # 打印详细GC日志
-XX:+PrintGCDateStamps # 打印GC时间戳
-XX:+PrintGCTimeStamps # 打印GC时间间隔
-Xloggc:/path/to/gc.log # GC日志输出路径
-XX:+PrintHeapAtGC # 打印GC前后的堆内存信息
-XX:+PrintGCApplicationStoppedTime # 打印应用暂停时间
-XX:+PrintGCApplicationConcurrentTime # 打印应用运行时间

1.2 GC 日志格式解析

1.2.1 Young GC日志示例
2024-03-20T10:44:23.876+0800: 2.870: [GC (Allocation Failure)
[PSYoungGen: 33280K->4880K(38400K)] 33280K->5008K(125952K), 0.0036685 secs]
[Times: user=0.02 sys=0.00, real=0.00 secs]

日志解析:

  • 2024-03-20T10:44:23.876+0800: GC发生的时间
  • 2.870: JVM启动后经过的秒数
  • PSYoungGen: 使用的垃圾收集器(这里是Parallel Scavenge)
  • 33280K->4880K(38400K): 年轻代GC前后的内存变化,括号内是总容量
  • 33280K->5008K(125952K): 整个堆内存GC前后的变化,括号内是总容量
  • 0.0036685 secs: GC耗时
1.2.2 Full GC日志示例
2024-03-20T10:45:23.876+0800: 62.870: [Full GC (Metadata GC Threshold)
[PSYoungGen: 10080K->0K(38400K)] [ParOldGen: 86K->86K(87552K)]
10167K->86K(125952K), [Metaspace: 20456K->20456K(1067008K)], 0.01356 secs]
[Times: user=0.06 sys=0.00, real=0.01 secs]

日志解析:

  • Full GC: 表示进行了完整的垃圾收集
  • Metadata GC Threshold: GC触发原因
  • PSYoungGen: 年轻代的内存变化
  • ParOldGen: 老年代的内存变化
  • Metaspace: 元空间的内存变化

1.3 GC日志分析工具

1.3.1 GCViewer
  • 开源的GC日志分析工具
  • 提供图形化界面
  • 主要功能:
    • GC事件可视化
    • 内存使用趋势分析
    • GC暂停时间统计
    • 吞吐量计算
1.3.2 GCEasy
  • 在线GC日志分析工具
  • 主要特点:
    • 自动识别GC类型
    • 提供详细的统计报告
    • 内存泄漏检测
    • 性能建议

1.4 GC日志分析要点

1.4.1 关键指标
  1. 吞吐量

    • 计算公式:(总运行时间 - 总暂停时间) / 总运行时间
    • 建议值:99% 以上
  2. 暂停时间

    • Minor GC: 建议小于50ms
    • Full GC: 建议小于1s
    • 关注最大暂停时间和平均暂停时间
  3. 内存使用

    • 堆内存使用率
    • 各代内存变化趋势
    • GC频率
1.4.2 常见问题分析
  1. 频繁的Young GC
  • 现象:Young GC频率过高
  • 可能原因:
    • 新生代空间不足
    • 对象创建速率过高
  • 解决方案:
    • 增加新生代大小
    • 优化对象创建
-Xmn2g # 增加新生代大小
  1. 频繁的Full GC
  • 现象:Full GC频率过高
  • 可能原因:
    • 老年代空间不足
    • 内存泄漏
    • 大对象直接进入老年代
  • 解决方案:
    • 增加老年代大小
    • 排查内存泄漏
    • 调整大对象阈值
-XX:PretenureSizeThreshold=3145728 # 设置大对象阈值为3MB

1.5 GC日志分析实战

1.5.1 分析步骤
  1. 收集完整GC日志
  2. 统计GC频率和时间
  3. 分析内存使用趋势
  4. 识别异常模式
  5. 制定优化方案
1.5.2 优化建议
  1. 调整内存分配
-Xms4g
-Xmx4g
-Xmn1.5g
-XX:SurvivorRatio=8

  1. 调整GC触发时机
G1收集器示例配置
-XX:InitiatingHeapOccupancyPercent=45 # 设置触发混合垃圾回收的阈值
-XX:G1HeapRegionSize=16m # 设置Region大小

  1. 优化GC性能
并行GC线程数配置
-XX:ParallelGCThreads=4 # 并行GC线程数
-XX:ConcGCThreads=2 # 并发GC线程数

1.6 GC日志监控预警

  1. 设置监控指标
  • GC频率
  • GC持续时间
  • 内存使用率
  • Full GC次数
  1. 告警阈值设置
示例告警条件
Full GC频率 > 1次/小时
单次GC暂停时间 > 1秒
堆内存使用率 > 85%
  1. 监控工具
  • Prometheus + Grafana
  • VisualVM
  • JConsole
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖心书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值