You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Thomas Wolf (Jira)" <ji...@apache.org> on 2021/07/23 08:44:00 UTC

[jira] [Resolved] (SSHD-1200) ERR - LEAK: ByteBuf.release() was not called before it's garbage-collected.

     [ https://issues.apache.org/jira/browse/SSHD-1200?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Thomas Wolf resolved SSHD-1200.
-------------------------------
    Fix Version/s: 2.2.0
       Resolution: Duplicate

Was fixed long ago in Apache MINA sshd 2.2.0. Relevant code is in {{org.apache.sshd.netty.NettyIoSession.channelRead()}}.

You should consider upgrading to the latest version (2.7.0).

> ERR - LEAK: ByteBuf.release() was not called before it's garbage-collected.
> ---------------------------------------------------------------------------
>
>                 Key: SSHD-1200
>                 URL: https://issues.apache.org/jira/browse/SSHD-1200
>             Project: MINA SSHD
>          Issue Type: Bug
>    Affects Versions: 2.1.0
>            Reporter: Nilesh Panchal
>            Priority: Major
>             Fix For: 2.2.0
>
>
> h3. Expected behavior
> Below error should not come:
>  'ERROR ResourceLeakDetector:319 - LEAK: ByteBuf.release() was not called before it's garbage-collected.'
> h3. Actual behavior
> 2021-07-21 15:45:00 ERROR ResourceLeakDetector:319 - LEAK: ByteBuf.release() was not called before it's garbage-collected. See [https://netty.io/wiki/reference-counted-objects.html] for more information.
>  Recent access records:
>  [#1|https://github.com/netty/netty/pull/1]:
>  io.netty.buffer.AdvancedLeakAwareByteBuf.getBytes(AdvancedLeakAwareByteBuf.java:250)
>  org.apache.sshd.netty.NettySupport$1.getRawBytes(NettySupport.java:44)
>  org.apache.sshd.common.util.buffer.ByteArrayBuffer.putBuffer(ByteArrayBuffer.java:150)
>  org.apache.sshd.common.util.buffer.Buffer.putBuffer(Buffer.java:491)
>  org.apache.sshd.common.session.helpers.AbstractSession.messageReceived(AbstractSession.java:510)
>  org.apache.sshd.common.session.helpers.AbstractSessionIoHandler.messageReceived(AbstractSessionIoHandler.java:63)
>  org.apache.sshd.netty.NettyIoSession.channelRead(NettyIoSession.java:181)
>  org.apache.sshd.netty.NettyIoSession$Adapter.channelRead(NettyIoSession.java:216)
>  io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
>  io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
>  io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
>  io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
>  io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
>  io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
>  io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
>  io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
>  io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
>  io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
>  io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
>  io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
>  io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
>  io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
>  io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
>  java.lang.Thread.run(Thread.java:748)
>  [#2|https://github.com/netty/netty/pull/2]:
>  Hint: 'NettyIoSession$Adapter#0' will handle the message from this point.
>  io.netty.channel.DefaultChannelPipeline.touch(DefaultChannelPipeline.java:116)
>  io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
>  io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
>  io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
>  io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
>  io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
>  io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
>  io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
>  io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
>  io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
>  io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
>  io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
>  io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
>  io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
>  io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
>  java.lang.Thread.run(Thread.java:748)
>  [#3|https://github.com/netty/netty/pull/3]:
>  Hint: 'DefaultChannelPipeline$HeadContext#0' will handle the message from this point.
>  io.netty.channel.DefaultChannelPipeline.touch(DefaultChannelPipeline.java:116)
>  io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
>  io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
>  io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
>  io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
>  io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
>  io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
>  io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
>  io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
>  io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
>  io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
>  java.lang.Thread.run(Thread.java:748)
>  [#4|https://github.com/netty/netty/pull/4]:
>  io.netty.buffer.AdvancedLeakAwareByteBuf.writeBytes(AdvancedLeakAwareByteBuf.java:634)
>  io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:350)
>  io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151)
>  io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
>  io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
>  io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
>  io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
>  io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
>  io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
>  io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
>  java.lang.Thread.run(Thread.java:748)
>  Created at:
>  io.netty.buffer.PooledByteBufAllocator.newDirectBuffer(PooledByteBufAllocator.java:402)
>  io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:187)
>  io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:178)
>  io.netty.buffer.AbstractByteBufAllocator.ioBuffer(AbstractByteBufAllocator.java:139)
>  io.netty.channel.DefaultMaxMessagesRecvByteBufAllocator$MaxMessageHandle.allocate(DefaultMaxMessagesRecvByteBufAllocator.java:114)
>  io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:150)
>  io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
>  io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
>  io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
>  io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
>  io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
>  io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
>  io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
>  java.lang.Thread.run(Thread.java:748)
> h3. Steps to reproduce
> NA - The err occurs on a random basis.
> h3. Minimal yet complete reproducer code (or URL to code)
> NA
> h3. Netty version
>  # Initially '4.1.29.Final' version was being used in our app when we noticed the err.
>  FYI- We are using the below mentioned jars in our app:
>  netty-buffer
>  netty-codec
>  netty-common
>  netty-handler
>  netty-resolver
>  netty-transport
>  # Then we upgraded above jars to '4.1.65.Final', but still the same error is appearing in our app logs.
> FYI - We are using below apache commons dependencies :-
>  commons-codec - 1.10
>  commons-io - 2.4
>  commons-lang - 2.6
>  commons-logging - 1.0.3
> and
>  below 'org.apache.sshd' dependencies - version 2.1.0 for all:
>  sshd-common
>  shd-sftp
>  sshd-scp
>  sshd-core
>  sshd-mina
>  sshd-netty
>  sshd-putty
>  sshd-cli
> h3. JVM version (e.g. {{java -version}})
> Java HotSpot(TM) 64-Bit Server VM (25.281-b25) for linux-amd64 JRE (1.8.0_281-b25)
> h3. OS version (e.g. {{uname -a}})
> Operating System - Linux
>  OS Version - 11 SP4
> Is this info sufficient?
>  We are checking the exact os version with our Unix team, once we get the details, we will update.
> We had reported this issue to netty, according to them - It's not a Netty bug.
>  and they asked us to Release the {{Bytebuf}} by ourself (If we've got the option),
> but we are not directly using Bytebuf, it is called by org.apache.sshd.netty.NettySupport$1.getRawBytes(NettySupport.java:44)
> netty mentioned :
>  this class is responsible for releasing {{Bytebuf}}.
> Just call {{Bytebuf#release}} method.
>  Refer - [https://github.com/netty/netty/issues/11502]
> and 
> [https://stackoverflow.com/questions/23539854/leak-bytebuf-release-was-not-called-before-its-garbage-collected/23540068]
> Could you please fix this issue asap?
> *Queries :-*
>  # Is this issue fixed in any of the mina-sshd/sshd-netty versions?
>  If yes - could you please let us know - which version?
>  If not - could you please let us know in which version this fix is expected?
>  FYI - I have checked NettySupport.java - getRawBytes() method on 'sshd-2.7.0' version also, but ByteBuf#release is not present in this method.
>  [https://github.com/apache/mina-sshd/blob/sshd-2.7.0/sshd-netty/src/main/java/org/apache/sshd/netty/NettySupport.java]
>  # Could you please check apache commons dependencies which we are using?
>  Do we need to also update these libs version to support netty higher version?



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@mina.apache.org
For additional commands, e-mail: dev-help@mina.apache.org