netty 大量 close_wait 导致其他 tcp 连接不上?
在centos7,利用netty创建tcp服务端,大概有1500的客户端tcp连接上,在短时间出现close_wait的机率很大(2分钟内可达2000个),大概一天二次,然后导致正常的tcp连接不上。
这种问题一般是客户端的问题,还是服务端没处理好呢?
在linux能不能通过某些命令主动清除close_wait。
回答:
close_wait都是出现在被动关闭的一端,也就是说是客户端主动断开的连接,此时服务端接收到了客户端的FIN
关闭请求。但是内核未调用close()
关闭socket,并给客户端发送一个FIN
,因此不能进入LAST_ACK
以及CLOSED
状态。
猜测原因:netty的I/O线程被阻塞,不能及时调用close方法;【需要具体分析线程dump】
另外感觉你这边可能都是短链接,那么
net.ipv4.tcp_keepalive_time
可以相应设小些【默认2小时】;- 服务端文件句柄数可以相应设置大些,避免大并发下导致socket句柄不足而无法建立tcp连接【主要下面的内核参数】;
* soft nofile 655360* hard nofile 655360
fs.file-max = 999999
如果后面发现是其他原因导致的该问题,希望也可以及时告知学习。
以上是 netty 大量 close_wait 导致其他 tcp 连接不上? 的全部内容, 来源链接: utcz.com/p/944472.html