close_wait状态出现的原因是被动关闭方未关闭socket造成,基本都是代码原因,比如HttpClient没有关闭连接、数据库连接没有关闭。

CLOSED 表示socket连接没被使用。 
LISTENING 表示正在监听进入的连接。 
SYN_SENT 表示正在试着建立连接。
SYN_RECEIVED 进行连接初始同步。 
ESTABLISHED 表示连接已被建立。 
CLOSE_WAIT表示远程计算器关闭连接,正在等待socket连接的关闭。 
FIN_WAIT_1 表示socket连接关闭,正在关闭连接。
CLOSING先关闭本地socket连接,然后关闭远程socket连接,最后等待确认信息。 
LAST_ACK 远程计算器关闭后,等待确认信号。 
FIN_WAIT_2 socket连接关闭后,等待来自远程计算器的关闭信号。 
TIME_WAIT 连接关闭后,等待远程计算器关闭重发。

查看各状态连接总数

netstat -natp|awk '{print $6}'|sort|uniq -c

查看CLOSE_WAIT连接

netstat -antp | grep CLOSE_WAIT

经过排查代码发现是http连接关闭只调用response.close();httpPost.releaseConnection();只会归还连接并不会关闭连接,关闭还要调用((SimpleHttpConnectionManager)client.getHttpConnectionManager()).closeIdleConnections(0);

改造后发现虽然CLOSE_WAIT没了,但是有大量的TIME_WAIT导致端口(每台机器只有6万多个端口可用)被占满了,TIME_WAIT连接达到了6万多的上限之后网络没有可用的端口而导致网络连接异常Address already in use。主动关闭socket的一方最终为time_wait,被动关闭的则为close_wait;time_wait在2msl时间后才会超时释放,这是为了让可能未到达的报文超时被抛弃避免影响后续重用该端口的连接。如果短时间内大量建立和关闭http连接会产生大量TIME_WAIT的连接占用端口无法及时释放而影响网络。正确使用应该建立http连接池而非每次都建立连接。临时解决办法就是先限制连接数量并开启重用,

打开sysctl.conf文件,修改以下几个参数:
vi /etc/sysctl.conf增加以下配置
#控制TIME_WAIT的最大数量
net.ipv4.tcp_max_tw_buckets=40000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_timestamps = 1
然后让配置生效执行 sysctl -p /etc/sysctl.conf

http连接还是应该复用,不应该每次都关闭closeIdleConnections(0),http工具类自带连接池,应该使用起来,回退修改后升级http的jar包。 业务代码也做了些优化解决。

linux下如何释放TIME_WAIT_u014659211的专栏-CSDN博客

close_wait过多解决后TIME_WAIT过多相关推荐

  1. 解决Linux TIME_WAIT过多造成的问题

    1. time_wait的作用: TIME_WAIT状态存在的理由: 1)可靠地实现TCP全双工连接的终止在进行关闭连接四次挥手协议时,最后的ACK是由主动关闭端发出的,如果这个最终的ACK丢失,服务 ...

  2. 如何解决 linux socket TIME_WAIT 过多造成的问题(SYN、ACK、FIN、MSL、RST含义)netstat查看TCP连接数命令

    文章目录 解决方法1 疑问:tcp_tw_reuse如何打开?要编译linux内核? 解决方法2:优化程序,减少TCP链接的创建与关闭,同一台服务器,连接一次就好了,不要连接了又关闭,然后再连接 相应 ...

  3. Viso插入Word后空白过多解决方法

    最近在肝毕业论文,途中遇到了一个问题,目的是将Viso画的图插入到Word里,但是插入后空白过多,无法解决.本人使用的Word版本是2020,Viso版本是2010,不太清楚是不是版本问题导致的... ...

  4. mysql show sleep_mysq解决sleep进程过多的办法

    问题分析 sleep进程过多 造成睡眠连接过多的原因? 1. 使用了太多持久连接 2. 程序中,没有及时关闭mysql连接 3. 数据库查询不够优化,过度耗时. 使用如下命令查看mysql所有进程 m ...

  5. mysql错误连接次数过多_解决Mysql连接过多错误的方法

    问:怎样解决mysql连接过多的错误? 答:系统不能连接数据库,关键要看两个数据: 1.数据库系统允许的最大可连接数max_connections.这个参数是可以设置的.如果不设置,默认是100.最大 ...

  6. 服务器TIME_WAIT过多

    最近发布的项目中,使用 netstat -ano 出现很多time_wait,经过各种资料搜索,现整理出linux和windows的解决方法,因为我用的是windows服务器,所以linux的解决方案 ...

  7. mysql运维-sleep线程过多_MySQL sleep过多解决方法

    现状: 睡眠连接过多,会对mysql服务器造成什么影响? 严重消耗mysql服务器资源(主要是cpu, 内存),并可能导致mysql崩溃. 原因分析: 造成睡眠连接过多的原因? 1. 使用了太多持久连 ...

  8. too many open files(打开的文件过多)解决方法

    too many open files(打开的文件过多)解决方法 参考文章: (1)too many open files(打开的文件过多)解决方法 (2)https://www.cnblogs.co ...

  9. ubuntu 符号连接的层数过多_Linux符号连接的层数过多解决

    Linux符号连接的层数过多解决 linux n创建符号链接的时候一定要使用绝对路径, 例如: /usr/local/cxxt/config-tools 需要创建到 /usr/bin/config-t ...

最新文章

  1. svn中提示”Files 的值 .mine 无效” 的解决方案
  2. list里面的数据按3个字段排序_Python数据分析:探索性分析
  3. C# TextBox改变高度的方法(转载)
  4. 基于电子邮件的InfoPath表单发布的注意点 [Infopath 2007]
  5. akka与neety_Akka STM –与STM Ref和Agent一起打乒乓球
  6. react 交互_如何在React应用程序中跟踪用户交互
  7. 12306能删候补订单记录_「实用」官方“捡漏”神器来了!12306铁路候补购票服务正式上线!...
  8. 各种服务器系统桌面,服务器系统云桌面
  9. django调用支付宝
  10. 北美互联网公司“隐藏福利”大盘点:看完我彻底酸了...
  11. Response常用方法
  12. 什么是erp管理系统
  13. Ubuntu 解决触摸板不识别问题
  14. php 图片获得大小,PHP获取一张图片的宽度和高度大小 并裁切图片
  15. IT小盆友:注意20种习惯最耗元气
  16. Flak模型和应用(一对一,一对多,多对多)
  17. ERP系统到底能做什么?
  18. PHP数组到底占用多少内存空间
  19. TensorFlow1.14或TensorFlow2内部获取mfcc原理探索(matlab复现或python复现)
  20. ad18放置标尺(测量)

热门文章

  1. 算法工程师面试备战笔记1_如何处理特征向量的缺失值
  2. java面向对象内存分析
  3. 独立站国际物流怎么解决?
  4. Scikit-Learn与回归树
  5. Leetcode每日一题:204.count-primes(计数质数)
  6. C++ STL标准模板库
  7. 【leetcode】726. Number of Atoms
  8. Kotlin协程的迷惑
  9. 第一:Python发送邮件时定义文本乱码
  10. python导入data-Python通过load data导入MySQL数据