DataXOOM
saber599

背景

线上环境发现有部分从ftp采集数据的任务出现OOM情况

排查过程

1. 查看日志

通过日志看到有出现OOM异常,因DataX的启动脚本配置了DEFAULT_JVM = “-Xms1g -Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%s/log” % (DATAX_HOME),故而出现OOM会输出对应的dump文件

2. 使用MAT分析dump文件

截图

  1. 使用MAT打开dump文件,根据报告发现大对象:com.csvreader.CsvReader

截图
2. 查看大对象对应属性,发现该对象的rawBuffer和columnBuffer较大

3. 查看DataX源码

截图
查看代码,发现CsvReader会默认将两个”之间的内容视为一列,在出现第一个”后即使遇到列分割符也不会结束列的读取,必须等到下一个”才结束,到这就已经知道原因了

问题修复

后续文件读取类任务,默认不开启该操作,都给csv配置带上: “useTextQualifier”: false

思考

  1. java应用都应该在启动命令上加上HeapDumpOnOutOfMemoryError HeapDumpPath参数,便于后续出现OOM问题排查
  2. 使用新组件时,需要了解关键默认配置