返回顶部
首页 > 资讯 > 服务器 >服务器中TIME_WAIT状态过多时怎么排查
  • 808
分享到

服务器中TIME_WAIT状态过多时怎么排查

2023-06-29 19:06:54 808人浏览 独家记忆
摘要

这篇文章主要介绍了服务器中TIME_WaiT状态过多时怎么排查的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇服务器中TIME_WAIT状态过多时怎么排查文章都会有所收获,下面我们一起来看看吧。一、概述(一)现象

这篇文章主要介绍了服务器中TIME_WaiT状态过多时怎么排查的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇服务器中TIME_WAIT状态过多时怎么排查文章都会有所收获,下面我们一起来看看吧。

一、概述

(一)现象

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

服务器中TIME_WAIT状态过多时怎么排查

服务器中TIME_WAIT状态过多时怎么排查

服务器中TIME_WAIT状态过多时怎么排查

服务器中TIME_WAIT状态过多时怎么排查

(二)相关知识

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

服务器中TIME_WAIT状态过多时怎么排查

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

命令:

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

服务器中TIME_WAIT状态过多时怎么排查

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

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

命令:

netstat -ant|grep 10.25.20.251:6601

服务器中TIME_WAIT状态过多时怎么排查

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

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

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

服务器中TIME_WAIT状态过多时怎么排查

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

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

命令:netstat -ant|grep 192.168.42.32:443

服务器中TIME_WAIT状态过多时怎么排查

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

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

(二)宿主机上的容器

1.应用和网络的关系

服务器中TIME_WAIT状态过多时怎么排查

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

服务器中TIME_WAIT状态过多时怎么排查

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

关于“服务器中TIME_WAIT状态过多时怎么排查”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“服务器中TIME_WAIT状态过多时怎么排查”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网服务器频道。

--结束END--

本文标题: 服务器中TIME_WAIT状态过多时怎么排查

本文链接: https://lsjlt.com/news/326186.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 服务器中TIME_WAIT状态过多时怎么排查
    这篇文章主要介绍了服务器中TIME_WAIT状态过多时怎么排查的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇服务器中TIME_WAIT状态过多时怎么排查文章都会有所收获,下面我们一起来看看吧。一、概述(一)现象...
    99+
    2023-06-29
  • 服务器中TIME_WAIT状态过多时的排查分析
    目录一、概述(一)现象(二)相关知识二、问题推测(一)网络(二)应用三、排查(一)TCP连接上的IP1.下图是容器的IP2.下图是连接中本地的IP3.下图是连接本地API项目的主动I...
    99+
    2024-04-02
  • linux服务器状态怎么检查
    可以使用以下命令来检查Linux服务器的状态:1. top:显示系统中最活跃的进程和CPU使用情况。2. free:显示系统内存使用...
    99+
    2023-06-06
    服务器状态 服务器
  • 怎么查看服务器状态信息
    要查看服务器的状态信息,您可以使用以下方法之一: 使用命令行工具:使用命令行工具(如Windows中的命令提示符或Linux中的...
    99+
    2023-10-21
    服务器
  • mysql服务状态怎么查看
    查看mysql服务状态的方法使用组合键“win+R”运行cmd,进入命令提示符窗口;进入到命令提示符窗口后,在命令行中使用net命令启动mysql服务;net start mysql;mysql服务启动后,在命令行中输入mysql的用户名和...
    99+
    2024-04-02
  • 怎么查看docker服务状态
    要查看Docker服务的状态,可以使用以下命令:1. 使用`systemctl`命令(适用于使用systemd作为服务管理器的Lin...
    99+
    2023-09-22
    docker
  • linux怎么查看服务状态
    在Linux系统中,可以使用以下命令来查看服务的状态:1. `systemctl status serviceName`:查看指定服...
    99+
    2023-09-21
    linux
  • centos怎么查看服务状态
    在CentOS中,可以使用systemctl命令来查看服务状态。 下面是一些常用的systemctl命令及其用法: 查看所有服务...
    99+
    2023-10-26
    centos
  • 怎么查看mysql服务状态
    可以通过以下几种方式来查看MySQL服务的状态: 使用命令行工具:打开命令行终端,输入以下命令来查看MySQL服务的运行状态: ...
    99+
    2024-04-09
    mysql
  • 服务器防火墙状态怎么查看
    您可以通过以下步骤查看服务器防火墙状态:1. 登录服务器:使用您的管理员帐户登录到服务器。2. 打开防火墙设置:在控制面板或系统设置...
    99+
    2023-06-08
    服务器防火墙 服务器
  • centos怎么查看ssh服务状态
    要查看CentOS上的SSH服务状态,可以使用以下命令之一:1. 使用`systemctl`命令:```systemctl stat...
    99+
    2023-09-15
    centos
  • Linux下怎么查看服务状态
    这篇文章主要介绍Linux下怎么查看服务状态,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. # ps aux | grep 服务名称(ps 的参数是可以颠倒使用没问题)教你如何在linux下查看服务是否已经启动或...
    99+
    2023-06-28
  • ubuntu怎么查看ssh服务状态
    要查看Ubuntu上的SSH服务状态,可以使用以下命令:1. 使用命令 `sudo systemctl status ssh` 查看...
    99+
    2023-09-07
    ubuntu ssh
  • linux怎么查看oracle服务状态
    在Linux中,可以使用以下命令来查看Oracle服务的状态:1. 使用`lsnrctl status`命令来查看监听器的状态:``...
    99+
    2023-08-18
    linux oracle
  • docker中怎么查看容器状态
    要查看 Docker 容器的状态,可以使用以下命令: 查看所有正在运行的容器: docker ps 查看所有容器(包括停止的...
    99+
    2024-03-07
    docker
  • 怎么在mysql中查看存储过程的状态
    在mysql中查询存储过程状态方法:1.启动mysql;2.登录mysql数据库;3.进入数据表;4.执行命令查看状态;具体步骤如下:首先,在命令行中启动mysql服务;service mysql start mysql服务启动后,输入用户...
    99+
    2024-04-02
  • 怎么通过其他主机查看Apahce服务器的运行状态
    小编给大家分享一下怎么通过其他主机查看Apahce服务器的运行状态,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!要查看Apache服务器的运行状态,可通过命令来实现。具体步骤如下:在Apache的主配置文件/etc/htt...
    99+
    2023-06-05
  • linux中mutex任务状态怎么查看
    在Linux中查看mutex任务状态可以通过以下几种方式: 使用命令行工具:可以使用命令行工具如top、htop或ps来查看当前...
    99+
    2024-03-15
    linux
  • 服务器租用时怎么排查漏洞
    服务器租用时排查漏洞的方法:1、在配置和管理路由器过程中采取相应的安全措施;2、限制系统物理访问,将控制台和终端会话配置成在较短闲置时间后自动退出系统;3、加长口令,选用30到60天的口令有效期等措施;4、禁用不必要服务,同时确保网络上的设...
    99+
    2024-04-02
  • 服务器状态查询的方法是什么
    有多种方法可以查询服务器状态,以下是其中几种:1. 通过命令行工具查询:使用命令行工具(如ping、telnet、tracert等)...
    99+
    2023-06-10
    服务器状态 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作