flume OOM 问题
1.产生原因
Flume OutOfMemoryError错误
运行Flume没多久就报下面的异常:
Exception in thread "PollableSourceRunner-KafkaSource-r1" java.lang.OutOfMemoryError: GC overhead limit exceeded
at org.apache.kafka.common.utils.Utils.toArray(Utils.java:266)
at org.apache.kafka.common.utils.Utils.toArray(Utils.java:229)
at org.apache.kafka.clients.consumer.internals.Fetcher.parseRecord(Fetcher.java:1029)
at org.apache.kafka.clients.consumer.internals.Fetcher.access$3300(Fetcher.java:110)
at org.apache.kafka.clients.consumer.internals.Fetcher$PartitionRecords.fetchRecords(Fetcher.java:1250)
at org.apache.kafka.clients.consumer.internals.Fetcher$PartitionRecords.access$1400(Fetcher.java:1099)
at org.apache.kafka.clients.consumer.internals.Fetcher.fetchRecords(Fetcher.java:545)
at org.apache.kafka.clients.consumer.internals.Fetcher.fetchedRecords(Fetcher.java:506)
at org.apache.kafka.clients.consumer.KafkaConsumer.pollForFetches(KafkaConsumer.java:1238)
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1200)
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1176)
at org.apache.flume.source.kafka.KafkaSource.doProcess(KafkaSource.java:216)
at org.apache.flume.source.AbstractPollableSource.process(AbstractPollableSource.java:60)
at org.apache.flume.source.PollableSourceRunner$PollingRunner.run(PollableSourceRunner.java:133)
at java.lang.Thread.run(Thread.java:748)
应该是我采集的数据太大了,导致Flume的JVM内存不够用。
用 ps -aux | grep flume查找Flume进程也能看到Flume使用了多少内存。
解决方法:
1、 vim bin/flume-ng
在里面找到JAVA_OPTS="-Xmx20m",它默认启动时最大可用内存为20,只要将其调大一点就可以了。
2、 或者在Flume conf目录下找到flume-env.sh.template文件
cp flume-env.sh.template flume-env.sh
vim flume-env.sh
把下面这句配置的注释删掉就可了
# export JAVA_OPTS="-Xms100m -Xmx2000m -Dcom.sun.management.jmxremote"
切忌 flume-env.sh 修改完成之后 启动flume后要加上--conf 的目录
参数说明:
--conf/-c:表示配置文件存储在conf/目录
--name/-n:表示给agent起名为a1
--conf-file/-f:flume本次启动读取的配置文件是在job文件夹下的flume-telnet.conf文件。
-Dflume.root.logger=INFO,console :-D表示flume运行时动态修改flume.root.logger参数属性值,并将控制台日志打印级别设置为INFO级别。日志级别包括:log、info、warn、error。
flume-ng agent --name a1 --conf /app/data/appuser/module/flume/conf --conf-file /app/data/appuser/module/flume/job/kafka-flume-hdfs.conf
nohup flume-ng agent --name a1 --conf-file /app/data/appuser/module/flume/job/kafka-flume-hdfs.conf -Dflume.root.logger=INFO,LOGFILE >/app/data/appuser/module/flume/logs/flume.log 2>&1 &