问题说明
最近借助自定义spark累加器的方式去监控我司大数据平台处理接入的数据量(自定义累加器定义可以参考方法,可以参考AccumulatorV2.scala),但是最近项目局点同事反馈,文件数很多的情况下,spark driver端会出现OOM。(现场driver内存配置了80G)
问题定位过程
因为现场dump文件达到80+G,因此,不能把dump文件完整的拿到办公机器来分析,只能借助linux memory analyzer tool工具去分析dump文件,得到一个分析结果(leak_suspects)。memory analyzer tool分析结果如下图所示:
根据图中的retained heap size,及number of objects信息,可以计算出平均一个taskInfo对象占了4.67M内存。
查看spark taskinfo部分源代码
class TaskInfo(
val taskId: Long,
/**
* The index of this task within its task set. Not necessarily the same as the ID of the RDD
* partition that the task is computing.
*/
val index: Int,
val attemptNumber: Int,
val launchTime: Long,
val ex