记录一次线上 full gc 排查

背景

收到一条full gc 告警

处理

止血:单机停流(保留现场)。事后 联系运维 dump heap信息

分析定位

内存持有某对象过多


原因

伪代码:

 List<Data> result = Lists.partition(listA, 1000).parallelStream()
                .map(item ->
                        batchProcessExportAttnPlanV2(listA, xxxx其余参数))
                .flatMap(Collection::stream)
                .collect(Collectors.toList());

listA 数量: 约4 w

因分批错误导致 listA 对象数量: 4w * (40 000 * 1000) = 160 w

避免

  1. 数量限制
  2. 导出这类大量对象操作,评估数据量做分批操作,而不是并行封装
  3. 插件扫描

分析工具:ibm HeapAnalyzer

posted @ 2025-02-12 15:11  执大象  阅读(17)  评论(0)    收藏  举报