Skip to content

[Bug] NettyConnectionHandler.channelInactive() does not remove channel from CHANNEL_MAP causing memory leak #16054

@liuhao1117

Description

@liuhao1117

Pre-check

  • I am sure that all the content I provide is in English.

Search before asking

  • I had searched in the issues and found no similar issues.

Apache Dubbo Component

Java SDK (apache/dubbo)

Dubbo Version

  • Dubbo version: dubbo-dubbo.3.2.19
  • Java version: 1.8
  • OS: Linux
  • Protocol: Triple (tri://)

Steps to reproduce this issue

  1. Configure a Dubbo consumer to call a Triple protocol service
  2. The Triple service endpoint is unreachable or TLS handshake fails
  3. Connection continuously fails and reconnects every second
  4. Observe CHANNEL_MAP size growing unbounded

What you expected to happen

When channelInactive is called, the channel should be removed from CHANNEL_MAP to prevent memory leak.

NettyConnectionHandler.channelInactive() only calls reconnect() but does NOT call NettyChannel.removeChannel(), causing channels to accumulate in CHANNEL_MAP.

NettyConnectionHandler.java (BUG):
@OverRide
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
super.channelInactive(ctx);
final Attribute goawayAttr = ctx.channel().attr(GO_AWAY_KEY);
if (!Boolean.TRUE.equals(goawayAttr.get())) {
reconnect(ctx.channel());
}
// ❌ Missing: NettyChannel.removeChannel(ctx.channel())
}

Anything else

No response

Do you have a (mini) reproduction demo?

  • Yes, I have a minimal reproduction demo to help resolve this issue more effectively!

Are you willing to submit a pull request to fix on your own?

  • Yes I am willing to submit a pull request on my own!

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    type/bugBugs to being fixed

    Type

    No type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions