hi all, 为了触发该异常, 预设场景: 1. jobmanager 分配1g内存 2. 持续跑一个离线查询job, 特点是查询文件数较大(1w个parquet文件), *任务在1s内结束*
如此跑到30-40次后, jm会oom异常退出, 此时dump出堆栈可以看92%的内存被 akka.actor.LightArrayRevolverScheduler$TaskQueue[512]占用,前30-40个TaskQueue中任然存在JobMaster, 由于文件数有1w个,所以每个JobMaster中的jobGraph和FileSplit对象也会较大,所以导致新的job无法构建导致oom 而同样的jm内存配置 + 文件数, 如果任务运行的稍慢,比如运行10s才结束, 这时JM虽然也有高堆栈占用导致高GC的问题,但是不会出现OOM , 说明JobMaster在被垃圾回收. 我的疑问是既然 JobMaster 已经在job执行完后 onStop 掉释放了资源, 为什么没被及时或者无法被回收, 从而导致JM的oom呢? JobMaster在job执行完后, 还会存留一段时间? 有些引用还未释放? -- Best, Jun Su