Netty(四):实现通道的多路复用

 问题描述:

    

    在进行压测时,一开始很正常,大约在30000次请求之后,错误率达到100%且接口耗时超过3s(人工设定的超时等待时间),查看日志后发现大量的Cannot assign requested address异常

    “Cannot assign requestedaddress”异常是由于Linux分配的客户端连接端口用尽,无法建立socket连接所致,虽然socket正常关闭,但是端口不是立即释放,而是处于TIME_WAIT状态,默认等待60s后才释放。所以也出现了大量的接口超时的现象了。

    因为我们在初始化Netty时使用了保活策略(ChannelOption.SO_KEEPALIVE),当长时间通道没有数据交流时,TCP会发送活动探测数据报文来测试通道的连接状态。在代码逻辑中我们在每一次建立与channel的连接时均新建了一个handler对象(即每次都新建一个通道的连接),所以每当有连接请求时都会分配新的通道,最终导致连接端口用尽。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值