首页 > 编程知识 正文

javawaitnotify原理,多线程wait notify

时间:2023-05-04 07:54:52 阅读:60237 作者:4674

[Java教程]TIME_WAIT、CLOSE_WAIT

0 2015-12-11 16:00:37

释放内容提要TCP连接的过程

TIME_WAIT大量TIME_WAIT的结果

解决方案

CLOSE_WAIT大量CLOSE_WAIT的结果

解决方案

TCP连接释放的过程

图中,a是主动关闭侧,b是被动关闭侧。

从图中可以看到,处于TIME_WAIT状态时,它处于活动状态。 对于CLOSE_WAIT,它处于被动关闭状态。

TIME_WAIT

由图可知,在TIME_WAIT状态下,有两个MSL (最大消息生存时间)的等待时间,然后变为CLOSED状态,释放资源。

为了使a发送的最后一个ACk消息段能够到达b,其实是为了真正关闭b,使连接都能够关闭。 毕竟是全双工通信,所以不会出现从a到b的连接关闭,从b到a的连接打开的状态。 这样只能说是半关闭状态。

MSL的默认值为120秒,即2分钟,因此2MSL为4分钟。 也就是说,主动关闭的一方将等待4分钟,直到释放相关资源。

TIME_WAIT带来的结果

1 )如果客户端遇到大量TIME_WAIT,则在这四分钟内尝试重用绑定该套接字的端口时,它将始终报告给BindException。

2 )如果服务端发生大量的TIME_WAIT,服务性能会下降。 基础上没有释放大量的stu RCT套接字,占用内存,因此用户数较多时需要卡。

3 )服务端重新启动时,服务器套接字绑定的端口可能处于TIME_WAIT状态,可能会发生BindException异常。

时间_等待解决方案

从编程的角度来看:

服务端最好不要(或很少)进入TIME_WAIT状态。 毕竟这个问题是不可避免的。 这意味着将TIME_WAIT分布到客户端,也就是说,允许客户端主动关闭连接。

从运输维度的角度来看:

必须调整操作系统的配置。 net.ipv4.tcp_SYN Cookies=1意味着打开syncookies。 如果发生SYN队列溢出,可以启用和处理cookies以防止少量SYN攻击。 默认值为0,表示关闭。 net.ipv4.tcp_tw_reuse=1意味着打开重用。 允许将时间等待套接字重用到新的TCP连接。 默认值为0,处于关闭状态。 net.ipv4.tcp_tw_recycle=1表示打开TCP连接的时间等待套接字的快速回收,默认值为0,表示关闭。 更改net.ipv4.tcp_fin_TIMEOUT系统的默认timeout时间,单位s

CLOSE_WAIT

从上述的TCP连接释放过程可以看出,在一方变为CLOSE_WAIT状态的情况下,连接被被动关闭之后,对方没有发送FIN消息段。

默认情况下,操作系统设置的Keepalive时间为2小时。

大量CLOSE_WAIT带来的结果

如果发生在客户端,则连接已被服务端关闭。 的这些端口在此CLOSE_WAIT状态下不可用。 如果使用,则必须向BindExcepion报告。

如果发生在服务端,如果客户端显示已关闭,则服务端也会变慢。 如果发生这种情况,就需要在服务端寻找原因。

解决方案

从编程的角度来看:

1 )在另一端关闭连接后,为什么在显示CLOSE_WAIT的一端关闭连接的操作不正确?

2 )出现此现象的客户端需要了解为什么服务端要关闭这些连接,以及为什么服务端不应该关闭这些连接。

要从代码中解决这些问题,它必须是运行Socket (或SocketChannel )的close )方法。 只有在执行此方法时,才会发送FIN消息段。

从运输维的角度看,tcp_keepalive_time :INTEGER的默认值为7200(2小时),这是打开keepalive时TCP发送keepalive消息的频率。 (由于现在的网络攻击等因素,利用它的攻击频繁发生。 cu朋友也提到过,两边建立连接后,如果不发送任何数据或rst/fin消息,持续时间会持续2个小时,不是会变成空连接攻击吗? tcp_keepalive_time是预防这种情况的。 进行nat服务时的变更值为1800秒。 (tcp_keepalive_probes:INTEGER的默认值为9TCP发送keepalive探测器以检查连接断开的次数。 (请注意,只有在打开SO_KEEPALIVE套接字选项时才会发送:连接。) 不需要更改默认次数。 当然,根据情况也可以适当缩短该值。 设定为5比较合适。 (tcp_keepalive_intvl:INTEGER的默认值为发送75条探测消息的频率,TCP_keeepalive )默认值为75秒,不活动的连接将在大约11分钟后丢弃。 (在典型的APP应用程序中,该值稍大,可以根据需要减小。 特别是在web类服务中,需要减小该值。 15是合适的值)

正文URL:http://www.Shao qun.com/a/166637.html

*特别声明:上述内容来自互联网,版权归原作者所有。 如有侵权,请联系admin@shaoqun.com。

0

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。