Joe Crobak created FLUME-1224:
---------------------------------
Summary: with jdbc channel and non-existant downstream agent,
flume agent quickly OOME's
Key: FLUME-1224
URL: https://issues.apache.org/jira/browse/FLUME-1224
Project: Flume
Issue Type: Bug
Components: Sinks+Sources
Affects Versions: v1.1.0
Reporter: Joe Crobak
Also tested on trunk.
With this sample configuration:
{noformat}
agent.sources = thriftLegacy
agent.sinks = avroForward
agent.channels = jdbcChannel
#agent.channels = recMemChannel
# channel configs
agent.channels.jdbcChannel.type = jdbc
agent.channels.recMemChannel.type =
org.apache.flume.channel.recoverable.memory.RecoverableMemoryChannel
agent.channels.recMemChannel.capacity = 5000
agent.sources.thriftLegacy.channels = jdbcChannel
agent.sinks.avroForward.channel = jdbcChannel
#agent.sources.thriftLegacy.channels = recMemChannel
#agent.sinks.avroForward.channel = recMemChannel
agent.sources.thriftLegacy.type =
org.apache.flume.source.thriftLegacy.ThriftLegacySource
agent.sources.thriftLegacy.host = localhost
agent.sources.thriftLegacy.port = 9108
agent.sinks.avroForward.type = avro
agent.sinks.avroForward.hostname = localhost
agent.sinks.avroForward.port = 9109
{noformat}
The agent OOME's on startup. I can up it's heap, and then it just takes a bit
longer to OOME on startup. The eventual backtrace is:
{noformat}
Exception in thread "SinkRunner-PollingRunner-DefaultSinkProcessor"
java.lang.OutOfMemoryError: Direct buffer memory
at java.nio.Bits.reserveMemory(Bits.java:632)
at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:97)
at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:288)
at
org.jboss.netty.channel.socket.nio.SocketSendBufferPool$Preallocation.<init>(SocketSendBufferPool.java:156)
at
org.jboss.netty.channel.socket.nio.SocketSendBufferPool.<init>(SocketSendBufferPool.java:43)
at
org.jboss.netty.channel.socket.nio.NioWorker.<init>(NioWorker.java:84)
at
org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink.<init>(NioClientSocketPipelineSink.java:74)
at
org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory.<init>(NioClientSocketChannelFactory.java:135)
at
org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory.<init>(NioClientSocketChannelFactory.java:105)
at
org.apache.avro.ipc.NettyTransceiver.<init>(NettyTransceiver.java:116)
at
org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:120)
at
org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:109)
at
org.apache.flume.api.NettyAvroRpcClient.<init>(NettyAvroRpcClient.java:94)
at
org.apache.flume.api.RpcClientFactory.getDefaultInstance(RpcClientFactory.java:131)
at org.apache.flume.sink.AvroSink.createConnection(AvroSink.java:148)
at org.apache.flume.sink.AvroSink.verifyConnection(AvroSink.java:176)
at org.apache.flume.sink.AvroSink.process(AvroSink.java:226)
at
org.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:68)
at org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:147)
at java.lang.Thread.run(Thread.java:680)
{noformat}
which suggests that this is related to
https://issues.jboss.org/browse/NETTY-424?_sscc=t
During this time, lots and lots of ERRORs are logged. It doesn't seem that the
sleep/retry logic is working properly. Here are some example log entries:
{noformat}
2012-05-22 18:10:42,291 INFO sink.AvroSink: Avro sink starting
2012-05-22 18:10:42,377 ERROR api.NettyAvroRpcClient: RPC connection error :
java.io.IOException: Error connecting to localhost:9109
at
org.apache.avro.ipc.NettyTransceiver.getChannel(NettyTransceiver.java:250)
at
org.apache.avro.ipc.NettyTransceiver.<init>(NettyTransceiver.java:199)
at
org.apache.avro.ipc.NettyTransceiver.<init>(NettyTransceiver.java:148)
at
org.apache.avro.ipc.NettyTransceiver.<init>(NettyTransceiver.java:116)
at
org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:120)
at
org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:109)
at
org.apache.flume.api.NettyAvroRpcClient.<init>(NettyAvroRpcClient.java:94)
at
org.apache.flume.api.RpcClientFactory.getDefaultInstance(RpcClientFactory.java:131)
at org.apache.flume.sink.AvroSink.createConnection(AvroSink.java:148)
at org.apache.flume.sink.AvroSink.start(AvroSink.java:188)
at
org.apache.flume.sink.DefaultSinkProcessor.start(DefaultSinkProcessor.java:46)
at org.apache.flume.SinkRunner.start(SinkRunner.java:79)
at
org.apache.flume.lifecycle.LifecycleSupervisor$MonitorRunnable.run(LifecycleSupervisor.java:228)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)
Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at
sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)
at
org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.connect(NioClientSocketPipelineSink.java:384)
at
org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.processSelectedKeys(NioClientSocketPipelineSink.java:354)
at
org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.run(NioClientSocketPipelineSink.java:276)
... 3 more
2012-05-22 18:10:42,379 ERROR sink.AvroSink: Unable to create avro client using
hostname:localhost, port:9109, batchSize: 100. Exception follows.
org.apache.flume.FlumeException: RPC connection error. Exception follows.
at
org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:126)
at
org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:109)
at
org.apache.flume.api.NettyAvroRpcClient.<init>(NettyAvroRpcClient.java:94)
at
org.apache.flume.api.RpcClientFactory.getDefaultInstance(RpcClientFactory.java:131)
at org.apache.flume.sink.AvroSink.createConnection(AvroSink.java:148)
at org.apache.flume.sink.AvroSink.start(AvroSink.java:188)
at
org.apache.flume.sink.DefaultSinkProcessor.start(DefaultSinkProcessor.java:46)
at org.apache.flume.SinkRunner.start(SinkRunner.java:79)
at
org.apache.flume.lifecycle.LifecycleSupervisor$MonitorRunnable.run(LifecycleSupervisor.java:228)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)
Caused by: java.io.IOException: Error connecting to localhost:9109
at
org.apache.avro.ipc.NettyTransceiver.getChannel(NettyTransceiver.java:250)
at
org.apache.avro.ipc.NettyTransceiver.<init>(NettyTransceiver.java:199)
at
org.apache.avro.ipc.NettyTransceiver.<init>(NettyTransceiver.java:148)
at
org.apache.avro.ipc.NettyTransceiver.<init>(NettyTransceiver.java:116)
at
org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:120)
... 17 more
Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at
sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)
at
org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.connect(NioClientSocketPipelineSink.java:384)
at
org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.processSelectedKeys(NioClientSocketPipelineSink.java:354)
at
org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.run(NioClientSocketPipelineSink.java:276)
... 3 more
2012-05-22 18:10:42,394 ERROR api.NettyAvroRpcClient: RPC connection error :
java.io.IOException: Error connecting to localhost:9109
at
org.apache.avro.ipc.NettyTransceiver.getChannel(NettyTransceiver.java:250)
at
org.apache.avro.ipc.NettyTransceiver.<init>(NettyTransceiver.java:199)
at
org.apache.avro.ipc.NettyTransceiver.<init>(NettyTransceiver.java:148)
at
org.apache.avro.ipc.NettyTransceiver.<init>(NettyTransceiver.java:116)
at
org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:120)
at
org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:109)
at
org.apache.flume.api.NettyAvroRpcClient.<init>(NettyAvroRpcClient.java:94)
at
org.apache.flume.api.RpcClientFactory.getDefaultInstance(RpcClientFactory.java:131)
at org.apache.flume.sink.AvroSink.createConnection(AvroSink.java:148)
at org.apache.flume.sink.AvroSink.verifyConnection(AvroSink.java:176)
at org.apache.flume.sink.AvroSink.process(AvroSink.java:226)
at
org.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:68)
at org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:147)
at java.lang.Thread.run(Thread.java:680)
Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at
sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)
at
org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.connect(NioClientSocketPipelineSink.java:384)
at
org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.processSelectedKeys(NioClientSocketPipelineSink.java:354)
at
org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.run(NioClientSocketPipelineSink.java:276)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
... 1 more
2012-05-22 18:10:42,395 WARN impl.JdbcTransactionImpl: Marking transaction for
rollback
2012-05-22 18:10:42,395 INFO impl.JdbcTransactionImpl: Attempting transaction
roll-back
2012-05-22 18:10:42,395 ERROR flume.SinkRunner: Unable to deliver event.
Exception follows.
org.apache.flume.EventDeliveryException: RPC connection error. Exception
follows.
at org.apache.flume.sink.AvroSink.process(AvroSink.java:264)
at
org.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:68)
at org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:147)
at java.lang.Thread.run(Thread.java:680)
Caused by: org.apache.flume.FlumeException: RPC connection error. Exception
follows.
at
org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:126)
at
org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:109)
at
org.apache.flume.api.NettyAvroRpcClient.<init>(NettyAvroRpcClient.java:94)
at
org.apache.flume.api.RpcClientFactory.getDefaultInstance(RpcClientFactory.java:131)
at org.apache.flume.sink.AvroSink.createConnection(AvroSink.java:148)
at org.apache.flume.sink.AvroSink.verifyConnection(AvroSink.java:176)
at org.apache.flume.sink.AvroSink.process(AvroSink.java:226)
... 3 more
Caused by: java.io.IOException: Error connecting to localhost:9109
at
org.apache.avro.ipc.NettyTransceiver.getChannel(NettyTransceiver.java:250)
at
org.apache.avro.ipc.NettyTransceiver.<init>(NettyTransceiver.java:199)
at
org.apache.avro.ipc.NettyTransceiver.<init>(NettyTransceiver.java:148)
at
org.apache.avro.ipc.NettyTransceiver.<init>(NettyTransceiver.java:116)
at
org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:120)
... 9 more
Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at
sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)
at
org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.connect(NioClientSocketPipelineSink.java:384)
at
org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.processSelectedKeys(NioClientSocketPipelineSink.java:354)
at
org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.run(NioClientSocketPipelineSink.java:276)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
... 1 more
{noformat}
There is about 15ms between each of these log entries until the app OOMEs. Note
that in my config, I've tried the commented out RecoverableMemoryChannel. When
I do that, I do not experience the bug.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira