在centos7,利用netty创建tcp服务端,大概有1500的客户端tcp连接上,在短时间出现close_wait的机率很大(2分钟内可达2000个),大概一天二次,然后导致正常的tcp连接不上。
这种问题一般是客户端的问题,还是服务端没处理好呢?
在linux能不能通过某些命令主动清除close_wait。
在centos7,利用netty创建tcp服务端,大概有1500的客户端tcp连接上,在短时间出现close_wait的机率很大(2分钟内可达2000个),大概一天二次,然后导致正常的tcp连接不上。
这种问题一般是客户端的问题,还是服务端没处理好呢?
在linux能不能通过某些命令主动清除close_wait。
15 回答8.4k 阅读
7 回答3.2k 阅读✓ 已解决
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
5 回答3.6k 阅读
3 回答2.2k 阅读✓ 已解决
close_wait都是出现在被动关闭的一端,也就是说是客户端主动断开的连接,此时服务端接收到了客户端的
FIN
关闭请求。但是内核未调用close()
关闭socket,并给客户端发送一个FIN
,因此不能进入LAST_ACK
以及CLOSED
状态。猜测原因:netty的I/O线程被阻塞,不能及时调用close方法;【需要具体分析线程dump】
另外感觉你这边可能都是短链接,那么
net.ipv4.tcp_keepalive_time
可以相应设小些【默认2小时】;如果后面发现是其他原因导致的该问题,希望也可以及时告知学习。