线上脚本任务出现了OOM,dump文件有27G左右,首先还是从线程去分析
jstack -l pid
查看线程,发现有同一个任务触发存在多个,排查下来定位是sleep时间过长,导致吞吐量不够,每天的任务会出现24h内都无法处理完成的情况。
经验
- 代码实现要合理,尽量减少全局变量hold住大对象
- 脚本类型的任务吞吐量,触发时间,触发方式等都需要提前预估好
- 排查jstack文件时,pool-xx-thread-xx这个名字挺难定位具体是谁创建出来的线程池,因此建议线程池创建需要给其一个自定义的名字,方便排查