一、概述

(一)现象

服务器有两个现象,第一是tcp连接数不多,不超过10个,但是time_wait状态的2000。第二个按照以往的性质,在很少用户访问的情况下,服务器的资源几乎没有使用,比如CPU,不超过5%。现在没有什么用户的的情况下,CPU损耗坚持在40%左右,夜间也不停歇。里面运行着好几个web项目,都用docker启动的容器分开。

(二)相关知识

tcp连接有3次握手,断开有四次挥手。

三次握手中第一次,是主动端发出SYN信号给正在listen的被动端,然后自己变成了SYN-SENT状态;第二次是被动端发送ACK确认收到信号和SYN信号;第三次是主动端发出ACK信号确认已经收到了被动端的SYN。然后双双进入了enblished状态,便是已经连接成功。

四次挥手中的第一次就是主动端断开,发送FIN信号,变成FIN-WAIT-1状态;第二次是被动方收到FIN信号,就变成CLOSE-WAIT状态,然后赶紧发送ACK信号给主动方确认,这是时候主动方变为FIN-WAIT-2状态;第三次还是被动方等自己的应用断开连接的时候,发送FIN信号给主动方,被动方的状态变成LAST-ACK;第四次是主动方收到被动方的FIN信号,然后发送的ACK信号,瞬间自己变成TIME-WAIT状态,然后等待回收。

就是说,谁有TIME-WAIT,谁就是主动方。这点可以排除用户频繁关闭网页的可能。意思就是说这都是服务器主动请求断开连接的,而TIME-WAIT状态的链接也没有回收。

二、问题推测

(一)网络

网络上面的就是网络不好,或者被攻击。

(二)应用

中间件的参数不对,导致有中间件断开的连接,或者应用程序错误造成的主动断开连接。或者也是应用方面导致消耗资源太多。

三、排查

这个服务器有三个项目,每个项目的架构都是lanmp。问题复杂在于服务器里面好几个项目,每个项目用都一个反向代理。好的一点是后端是docker容器,分开的。

(一)TCP连接上的IP

1.下图是容器的IP

命令:for i in $(docker ps|awk 'NR!=1 {print $NF}');do echo -e $i "\c";docker inspect --format '{{ .NetworkSettings.IPAddress }}' $i;done

2.下图是连接中本地的IP

命令:netstat -tn|grep TIME_WAIT|awk '{print $4}'|sort|uniq -c|sort -nr|head

排名第一这个是我们本地IP,6601是api项目的监听端口,从这里可以看出在所欲的TIME_WAIT状态的TCP里面,API项目的后端是被请求最多的那个。估计反向代理服务器也被请求了很多。

3.下图是连接本地API项目的主动IP

命令:netstat -ant|grep 10.25.20.251:6601

途中可以看出,请求连接API后端的全部都是nginx的IP,这也很容易理解,nginx反向代理是入口嘛。下面就看看到底是谁对nginx发出请求。

4.下图是连接中外地的IP

命令:netstat -tn|awk '{print $5}'|sort|uniq -c|sort -nr|head

对API的请求是600,对nginx的请求是300,说明所有的TIME-WAIT,一部分是请求nginx的,一部分是nginx请求API的。

5.下图是展示到底是对请求了API的web前端nginx

命令:netstat -ant|grep 192.168.42.32:443

原来是192.168.42.1这个IP的请求。其实192.168.42.1这个IP是docker的虚拟网卡的IP,作为全部容器的网关,也就是说反正这就是这些容器发出的请求,但是不能确定是哪一个。

综上所述,可以排除网络问题,中间件apache的参数没有改,但是对web前端nginx的请求那么多,可以说明问题不是出现在apache的请求上面。那就往代码错误方面考虑。

(二)宿主机上的容器

1.应用和网络的关系

可能TIME-WAIT的问题就是后端程序乱发请求,apache是主项目的后端容器,apache-api就是api的后端程序。webserver占用的CPU上升,刚好就说明容器使用的系统资源就是由这种请求引起的。下面用tail看看api的access日志。

实时监测,发现API一秒钟被请求12次左右,根据业务性质和docker的状态显示,可以断定是主项目的循环请求造成的系统资源内耗。而每次请求API项目就返回了access_token,API返回数据之后就发出断开信号,逻辑和现象很符合,也可以断定TIME_WAIT的状态也是这请求引起。而TIME_WAIT不是不回收,而是回收了,但不断的生成。

转载于:https://www.cnblogs.com/hodge01/p/9378935.html

TIME_WAIT状态过多的排查相关推荐

  1. LINUX下解决netstat查看TIME_WAIT状态过多问题

    LINUX下解决netstat查看TIME_WAIT状态过多问题 参考文章: (1)LINUX下解决netstat查看TIME_WAIT状态过多问题 (2)https://www.cnblogs.co ...

  2. linux 进程 状态 ri,LINUX下解决netstat查看TIME_WAIT状态过多问题(转)

    # netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c 16 CLOSING 130 ESTABLISHED 298 FIN_WAIT1 13 FIN_WA ...

  3. TIME_WAIT状态产生的原因、过多的危害

    一.TCP连接断开的四次挥手: 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭. 其原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接.收到一个 FIN只意味着这一方向 ...

  4. close wait 过多原因_从Linux源码看TIME_WAIT状态的持续时间

    前言 笔者一直以为在Linux下TIME_WAIT状态的Socket持续状态是60s左右.线上实际却存在TIME_WAIT超过100s的Socket.由于这牵涉到最近出现的一个复杂Bug的分析.所以, ...

  5. Linux-TCP/IP TIME_WAIT状态原理

    TIME_WAIT状态原理 ---------------------------- 通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态. 客户端主动关闭连接时,会发送最后一个 ...

  6. 面试官问:大量的 TIME_WAIT 状态 TCP 连接,对业务有什么影响?怎么处理?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 几个方面: 问题描述:什么现象?什么影响? 问题分析 解决 ...

  7. 大量的 TIME_WAIT 状态 TCP 连接,对业务有什么影响?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | ningg.top/computer-basi ...

  8. 也说说TIME_WAIT状态

    也说说TIME_WAIT状态 一个朋友问到,自己用go写了一个简单的HTTP服务端程序,为什么压测的时候服务端会出现一段时间的TIME_WAIT超高的情况,导致压测的效果不好呢? 记得老王有两篇文章专 ...

  9. TCP/IP TIME_WAIT状态原理

    TIME_WAIT状态原理 ---------------------------- 通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态. 客户端主动关闭连接时,会发送最后一个 ...

  10. 网络基础2-3(TCP协议,三次握手,四次挥手,TIME_WAIT状态的作用,TCP如何保证可靠传输,TCP连接中状态转化,滑动窗口,流量控制,快速重传,拥塞窗口,延迟应答,捎带应答,粘包问题)

    TCP协议 TCP协议概念 TCP全称为 "传输控制协议(Transmission Control Protocol"). 人如其名, 要对数据的传输进行一个详细的控制 TCP协议 ...

最新文章

  1. 17DOM之操作元素
  2. iOS开发之窗口和视图
  3. 洛谷 - P4783 【模板】矩阵求逆(高斯消元求逆矩阵)
  4. 酸了!华为补贴湖北员工每天最高 2000 元
  5. git-比对不同-diff
  6. ajax同步、异步区别及应用
  7. 在ubuntu16.04-32bits 下编译vlc和vlc-qt开源项目
  8. html5调用系统声音1s响一次_为你的html5网页添加音效示例
  9. unity3D 插件plugins
  10. Linux入门学习(十 三)—— 怎么给指定用户发送信息? 怎么发送广播消息?
  11. [莫队算法 线段树 斐波那契 暴力] Codeforces 633H Fibonacci-ish II
  12. Flutter 修改自带Switch,实现轻量自定义Switch,使用screen_utils适配大屏
  13. 一套非常精美的全球地貌晕渲图,有想要的吗?
  14. lisp画示坡线_示坡线画法图文教程
  15. ie的主页被修改了,改不过来怎么办??
  16. Element-UI实现对话框内播放视频
  17. vim编辑器退不出来的问题
  18. 用MDA理论分析炉石的职业系统
  19. python数字1 3怎么表示_Python3生成手写体数字方法
  20. 少女心多功能便签本,少女心便签软件办公版

热门文章

  1. JAVA开发一个合并单元格报表,纵向同值单元格的合并
  2. 关于账号密码校验的两种IO流操作
  3. mysql遵循acid_关系型数据库遵循ACID规则
  4. mysql+mmm+主动模式_MySQL集群搭建(4)-MMM+LVS+Keepalived
  5. 怎么判断噎到没噎到_怎么判定股市是在走牛市还是走熊市呢?两种最简单的判定方法...
  6. mysql导入报错 [Err] 1273 – Unknown collation: ‘utf8mb4_0900_ai_ci’
  7. oracle汉字转首字母大写,oracle job定时更新表中文姓名对应拼音字段
  8. linux mysql 主从数据库_Linux下MySQL数据库主从同步配置
  9. L3_01 01背包和最小序列
  10. Android Studio 应用目录结构说明