我 flume 用spooldir source监控目录抽取文件,随便建一个监控目录用作测试完全没问题,但实际启动时,要抽取文件的目录里已经存在10万多个小文件,总大小100多个G,这些文件个数还会源源不断的扩大,才启动就报错GC overhead limit exceeded;
于是我在网上各种查资料,修改了flume-env.sh,添加JAVA_OPTS=“-Xms8g -Xmx16g” 并且把source中的batchSize改大到100000,channel中的capacity都调大,再启动依然报同样的错……
难道flume spooldir模式真的是不管目录下有多少文件,都会一次性取走么?而不能一批一批的拿?
然后我再研究其参数,发现有一个consumerOrder,默认配置oldest,还可以配置youngest、random
我看官网flume-1.8的文档中说:oldest意思是抽取数据时判断从最早的数据抽起,和youngest从最新数据开始抽一样,都会scan所有文件来判断是否是最老或最新的文件;而random是随机的意思、也就是从任意文件开始、不用扫描整个目录??
我以为这是出现内存溢出这个错误的主要原因了,就是,默认值让它扫描了整个目录来找最早的文件、内存不够用了,于是我把该参数配置为random,再次启动…………特么的还是报同样的错:GC overhead limit exceeded……
文件是不断追加的,而现在是测试阶段、所以我尝试过删除部分数据,只剩3万条,再开flume,就可以抽了,可是跑不了多久,它又会报同样的错……现在不知道该如何解决了