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