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】

另外感觉你这边可能都是短链接,那么

  1. net.ipv4.tcp_keepalive_time可以相应设小些【默认2小时】;
  2. 服务端文件句柄数可以相应设置大些,避免大并发下导致socket句柄不足而无法建立tcp连接【主要下面的内核参数】;
* soft nofile 655360

* hard nofile 655360

fs.file-max = 999999

如果后面发现是其他原因导致的该问题,希望也可以及时告知学习。

以上是 netty 大量 close_wait 导致其他 tcp 连接不上? 的全部内容, 来源链接: utcz.com/p/944472.html

回到顶部