TIME_WAIT状态详解

来源:互联网 发布:Mac 变速播放器 编辑:程序博客网 时间:2024/06/02 18:16

引入问题

前几天在生产环境的Windows服务器上碰到一个奇怪的问题。使用SqlDeveloper访问Oracle数据库,已经连接的实例可以正常访问数据库,而新建连接时,提示连接不上数据库异常。

排查原因

网络上的问题,首先考虑用netstat -ano命令检查一下本机的网络连接情况。
+
发现TCP协议的端口被占用完,并且状态都是「TIME_WAIT」,进一步发现问题的源头是某个程序连续地新建HTTP连接去访问WEB服务,但释放连接却有延时,导致所有的TCP端口在短时间内耗尽,系统没有额外的TCP端口资源分配给新的请求,然后报错。

那么,为什么断开TCP连接会有延时?如何规避TCP端口耗尽呢?

为什么断开TCP连接会有延时

TCP的连接过程及状态可参见上一篇博文。对于本文中出现的问题,其实是「TIME_WAIT」状态在作祟。

如何规避TCP端口耗尽

建立长连接。

0 0