一、现象:
16点30分左右,某服务飘红,重启之后,内存很快又爆掉,扩充实例到8台之后仍然不行,最后临时调大最大堆和最小堆到3g,暂时抗住。
二、原因分析:
历史遗留问题,1年前某开发写代码时将,所有数据拼成一条sql去存储,随着数据量变大14w数据用一条sql怼到数据库导致服务宕机。
三、Kibana日志:
四、线上服务器配置:-xms2g -xmx2g
年轻代1G 老年代1G
五、fullgc分析:
六、问题代码:
七、解决方案:
1、业务上:
1、任务规则 乘 任务商品 总条数需要小于10w条,超过之后分批导入
2、防止同一文件重复提交
3、防止同一文件导入成功之后,多次重复导入
2、技术上:
1、超过10w条,提示用户,分批导入
3、大数组拆分成多个小数组(500个一组),分批执行
七、后续如何规避:
排查项目里涉及到sql批量操作的地方,进行调整,避免大sql