首页 > 其他分享 >网络连接存在大量time_wait和close_wait的原因以及解决方法

网络连接存在大量time_wait和close_wait的原因以及解决方法

时间:2023-07-04 20:11:20浏览次数:32  
标签:主机 报文 time close wait FIN WAIT

 

四次挥手过程:

第一次挥手:主机A(可以是客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机B发送一个FIN报文段;此时,主机A进入FIN_WAIT_1状态;这表示主机A没有数据要发送给主机B了。

第二次挥手:主机B收到了主机A发送的FIN报文段,向主机A回一个ACK报文段,Acknowledgment Number为Sequence Number加1,主机A进入FIN_WAIT_2状态;主机B告诉主机A,我也没有数据要发送了,可以进行关闭连接了。

第三次挥手:主机B向主机A发送FIN报文段,请求关闭连接,同时主机B进入CLOSE_WAIT状态。

第四次挥手:主机A收到主机B发送的FIN报文段,向主机B发送ACK报文段,然后主机A进入TIME_WAIT状态;主机B收到主机A的ACK报文段以后,就关闭连接;此时,主机A等待2MSL后依然没有收到回复,则证明主机B已正常关闭,那好,主机A也可以关闭连接了。

大量time_wait

问题原因

《关于三次握手与四次挥手你要知道这些》中有关于“四次挥手释放连接时,等待2MSL的意义”的解释。正因为有2ML的存在,所以可能会发生大量time_wait存在的现象,从而影响服务器性能,甚至导致套接字数量达到服务器上限。

实际上,TIME_WAIT对于系统资源的消耗影响比较小,而真正需要考虑因为TIME_WAIT多而触碰到限制的是如下几个方面:

源端口数量 (
net.ipv4.ip_local_port_range)TIME_WAIT bucket 数量 (net.ipv4.tcp_max_tw_buckets)文件描述符数量 (max open files)

解决方法

只需要优化服务器系统的网络配置,连接配置,使用socket重用或及时释放资源即可。(由于系统不断迭代,所以这里不给出具体参数修改)

大量close_wait

问题原因

主机B一直没有进行第三次挥手,会导致主机B存在大量close_wait状态的连接。大量这种情况发生会影响服务器性能,同样可能导致套接字数量达到服务器上限。

网络连接未及时释放,通常是服务端发生异常后未关闭连接或者close_wait的配置时间过长。如果是mysql数据库也可能存在事务开启后没有正确rollback或commit的可能。

总之,都是大概率是服务端代码或配置的问题。

解决方法

以下方法并不存在顺序,定位问题时也并不是一定同时需要。

  • top查看cpu利用率和load情况(大量close_wait属于io密集型,会导致load相比cpu利用率高出很多)
  • netstat观察close_wait的数量变化。
  • wireshark辅助查看网络包的发送情况。
  • perf或者火焰图定位热点函数。
  • java可以将服务器线程堆栈dump,查看大量线程在哪里blocked。

标签:主机,报文,time,close,wait,FIN,WAIT
From: https://www.cnblogs.com/fcjedorfjoeij/p/17526887.html

相关文章

  • 【Netty】「萌新入门」(三)ChannelFuture 与 CloseFuture
    前言本篇博文是《从0到1学习Netty》中入门系列的第三篇博文,主要内容是介绍Netty中ChannelFuture与CloseFuture的使用,解决连接问题与关闭问题,往期系列文章请访问博主的Netty专栏,博文中的所有代码全部收集在博主的GitHub仓库中;连接问题与ChannelFuture在Netty中,所有的......
  • 关闭vue项目中Uncaught runtime errors弹窗页面
    看控制台发现有webpack类名,应该是webpack搞出来的解決办法再vue.config.js中添加以下配置:module.exports=defineConfig({ ... devServer:{client:{overlay:false}}})......
  • Daylight Savings Time (DST)
    NotethatEDTisadaylightsavingtime/summertimezone.Itisgenerallyonlyusedduringthesummerintheplaceslistedbelow,duringthewinterESTisusedinsteadNotethatmostplacesobservedaylightsavingtime/summertimeduringsummer,anda......
  • dotnet\shared vs dotnet\packs\ref\ reference assembly vs runtime assembly
    dotnet\sharedvsdotnet\packs\ref\C:\ProgramFiles\dotnet\shared\Microsoft.AspNetCore.App\6.0.16\Microsoft.AspNetCore.Identity.dllC:\ProgramFiles\dotnet\packs\Microsoft.AspNetCore.App.Ref\6.0.16\ref\net6.0\Microsoft.AspNetCore.Identity......
  • Python | datetime库函数的详解
    datetime是Python内置的日期时间处理库,它包含了处理日期、时间、时间间隔等的类和函数。datetime库可以从系统中获得时间,并以用户选择的格式输出。下面是datetime常用的类和函数以及它们的详细解释。datetime类datetime类是date和time两个类的结合体,表示一个具体的......
  • Shortest Time(最短时间)
    题目描述如图所示,有若干个城市,它们之间有道路连通,可以互相到达,从一个城市到另一个城市时间为1。现在给出起点城市A,终点城市B,和N条道路。问从A到B最短时间。Input第一行A,B,N(A,B,N<=30),B为最大城市标号;接下来N行,每行两个数x,y,表示城市x和城市y有道路相连。Output最短到达时间......
  • 【C#/.NET】探究Task中ConfigureAwait方法
    ​ 目录 引言ConfigureAwait方法的作用和原理ConfigureAwait方法的使用场景非UI线程场景避免上下文切换避免死锁ConfigureAwait方法的注意事项在UI线程使用时需要小心嵌套搭配使用总结 引言        在.NET开发中,我们经常使用异步编程来提高应用程序的......
  • 11.8 RuntimeException
    demo1parseInt()方法不处理异常publicclassJavaDemo{ publicstaticvoidmain(Stringargs[]){ intnum=Integer.parseInt("123");//课程中从官网手册,查看parseInt方法,使用RuntimeException,非强制处理异常 System.out.println(num); }}面试题:请解释RuntimeEx......
  • 如何理解iowait
    Linux中,%iowait过高可能是个问题,严重的时候,它能使服务停止,但问题是,多高才算高?什么时候应该担心呢?本文将讨论iowait的含义、相关的统计数据、原理以及iowait的瓶颈问题什么是iowaitLinux中的解释ShowthepercentageoftimethattheCPUorCPUswereidleduringw......
  • TCP TIME_WAIT 状态 及相关问题优化
    TCP是一种面向连接的可靠的传输协议,它在建立和释放连接时,需要经过一系列的握手和挥手过程。在这个过程中,会涉及到一些不同的状态,其中一个比较常见但又容易被误解的状态就是TIME_WAIT状态。本文将从以下几个方面介绍TIME_WAIT状态的原理和优化方法:TIME_WAIT状态是如何产生......