DataXOOM
背景
线上环境发现有部分从ftp采集数据的任务出现OOM情况
排查过程
1. 查看日志
通过日志看到有出现OOM异常,因DataX的启动脚本配置了DEFAULT_JVM = “-Xms1g -Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%s/log” % (DATAX_HOME),故而出现OOM会输出对应的dump文件
2. 使用MAT分析dump文件
- 使用MAT打开dump文件,根据报告发现大对象:com.csvreader.CsvReader
2. 查看大对象对应属性,发现该对象的rawBuffer和columnBuffer较大
3. 查看DataX源码
查看代码,发现CsvReader会默认将两个”之间的内容视为一列,在出现第一个”后即使遇到列分割符也不会结束列的读取,必须等到下一个”才结束,到这就已经知道原因了
问题修复
后续文件读取类任务,默认不开启该操作,都给csv配置带上: “useTextQualifier”: false
思考
- java应用都应该在启动命令上加上HeapDumpOnOutOfMemoryError HeapDumpPath参数,便于后续出现OOM问题排查
- 使用新组件时,需要了解关键默认配置