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  &
    
posted @ 2021-12-15 16:46  triumph丶xs  阅读(346)  评论(0编辑  收藏  举报