Troubleshooting系列-应用JVM启动参数调优实践

💡 原文中文,约2300字,阅读约需6分钟。
📝

内容提要

最近重新梳理了JVM参数和垃圾收集器相关知识,通过分析问题现象和JVM参数,发现堆内存浪费和对象分布问题。根据分析结果,调整JVM参数和堆布局,增加垃圾回收频率。

🎯

关键要点

  • 重新梳理JVM参数和垃圾收集器相关知识,准备优化现网应用。
  • 应用服务基于Spring Boot、MyBatis、Druid、Dubbo和RocketMQ搭建,发现每天有10次full GC。
  • 在业务高峰期,full GC频率为每半小时或1小时一次,每次耗时约500ms。
  • 分析JVM启动参数,发现堆内存浪费和对象分布问题。
  • 堆最大为4G,2.84G后开始major GC,gc后剩余1.43G内存,存在内存浪费。
  • 调整JVM参数,增大年轻代和老年代比例,增加老年代堆内存使用率。
  • 通过heap dump分析,发现主要内存占用对象,包括Caffeine缓存、MySQL连接和SSLSessionContextImpl。
  • 调整Caffeine缓存的最大key数量,减少Druid连接池的最大连接数。
  • 准备在下次升级时调整JVM参数,优化堆布局和垃圾回收频率。
➡️

继续阅读