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参数,优化堆布局和垃圾回收频率。
➡️