Uploaded image for project: 'Apache Drill'
  1. Apache Drill
  2. DRILL-8489

Sender memory leak when rpc encode exception

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.21.1
    • 1.21.2
    • Server
    • None

    Description

      When encode throw Exception, if encode msg instanceof ReferenceCounted, netty can release msg, but drill convert msg to OutboundRpcMessage, so netty can not release msg. this  causes sender memory leaks

      exception info 

      2024-04-16 16:25:57,998 [DataClient-7] ERROR o.a.d.exec.rpc.RpcExceptionHandler - Exception in RPC communication.  Connection: /10.32.112.138:47924 <--> /10.32.112.138:31012 (data client).  Closing connection.
      io.netty.handler.codec.EncoderException: org.apache.drill.exec.exception.OutOfMemoryException: Unable to allocate buffer of size 4096 due to memory limit (9223372036854775807). Current allocation: 0
              at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:107)
              at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:881)
              at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:940)
              at io.netty.channel.AbstractChannelHandlerContext$WriteTask.run(AbstractChannelHandlerContext.java:1247)
              at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
              at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
              at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
              at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
              at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
              at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
              at java.lang.Thread.run(Thread.java:748)
      Caused by: org.apache.drill.exec.exception.OutOfMemoryException: Unable to allocate buffer of size 4096 due to memory limit (9223372036854775807). Current allocation: 0
              at org.apache.drill.exec.memory.BaseAllocator.buffer(BaseAllocator.java:245)
              at org.apache.drill.exec.memory.BaseAllocator.buffer(BaseAllocator.java:220)
              at org.apache.drill.exec.memory.DrillByteBufAllocator.buffer(DrillByteBufAllocator.java:55)
              at org.apache.drill.exec.memory.DrillByteBufAllocator.buffer(DrillByteBufAllocator.java:50)
              at org.apache.drill.exec.rpc.RpcEncoder.encode(safeRelease.java:87)
              at org.apache.drill.exec.rpc.RpcEncoder.encode(RpcEncoder.java:38)
              at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:90)

      Attachments

        Activity

          People

            Unassigned Unassigned
            shihuafeng shihuafeng
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: