虚引用GC耗时分析优化(由 1.2 降低至 0.1 秒)
💡
原文中文,约8400字,阅读约需20分钟。
📝
内容提要
线上应用出现超时告警,分析发现getUiToken接口的GC处理时间过长,主要是由于大量PhantomReference对象。通过优化数据库连接池配置和开启并行处理,GC时间显著降低,系统响应恢复正常,超时告警消失。
🎯
关键要点
- 线上应用频繁出现超时告警,主要是getUiToken接口的GC处理时间过长。
- GC处理时间过长的原因是大量PhantomReference对象。
- 通过优化数据库连接池配置和开启并行处理,GC时间显著降低。
- 优化后,系统响应恢复正常,超时告警消失。
- 分析发现,getUiToken接口的业务代码简单,没有复杂操作。
- GC日志显示,young gc次数过多,且处理PhantomReference耗时较长。
- PhantomReference是最弱的引用关系,主要用于对象被回收时的通知。
- 大量ConnectionPhantomReference对象的产生与数据库连接的管理有关。
- 优化建议包括调整连接池配置和开启ref-proc并行处理。
- 定时清理虚引用列表数据或升级mysql-connector-java版本也是可行的解决方案。
- 优化后GC时间最大停顿时间显著降低,系统响应正常,超时告警消失。
➡️