`
zqjshiyingxiong
  • 浏览: 441361 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

linux 出现大量的TIME_WAIT解决办法

阅读更多

昨天服务器的应用有开始慢了,


登陆服务器的时候输入 netstat -an|grep mysql

之前有遇到过这种情况


发现存在大量 TIME_WAIT 状态的连接

tcp        0      0 127.0.0.1:3306              127.0.0.1:41378             TIME_WAIT
tcp        0      0 127.0.0.1:3306              127.0.0.1:41379             TIME_WAIT

tcp        0      0 127.0.0.1:3306              127.0.0.1:39352             TIME_WAIT

tcp        0      0 127.0.0.1:3306              127.0.0.1:39350             TIME_WAIT
tcp        0      0 127.0.0.1:3306              127.0.0.1:35763             TIME_WAIT
tcp        0      0 127.0.0.1:3306              127.0.0.1:39372             TIME_WAIT
tcp        0      0 127.0.0.1:3306              127.0.0.1:39373             TIME_WAIT
tcp        0      0 127.0.0.1:3306              127.0.0.1:41176             TIME_WAIT

 

 

 

通过调整内核参数解决

vi /etc/sysctl.conf


编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

 

然后执行 /sbin/sysctl -p 让参数生效。

 

net.ipv4.tcp_syncookies = 1 表示开启 SYN Cookies 。当出现 SYN 等待队列溢出时,启用 cookies 来处理,可防范少量 SYN 攻击,默认为 0 ,表示关闭;


net.ipv4.tcp_tw_reuse = 1
表示开启重用。允许将 TIME-WAIT sockets 重新用于新的 TCP 连接,默认为 0 ,表示关闭;


net.ipv4.tcp_tw_recycle = 1
表示开启 TCP 连接中 TIME-WAIT sockets 的快速回收,默认为 0 ,表示关闭。


net.ipv4.tcp_fin_timeout
修改系統默认的 TIMEOUT 时间

 

修改之后,再用命令查看 TIME_WAIT 连接数

netstat -ae|grep “TIME_WAIT” |wc –l


   
发现大量的 TIME_WAIT  已不存在, mysql 进程的占用率很快就降下来的,网站访问正常。

  不过很多时候,出现大量的TIME_WAIT状态的连接 ,往往是因为网站 程序代码中没有使用mysql.colse(),才导致大量的mysql  TIME_WAIT.

 

  如果你的服务器是Windows 平台 ,可以修改下面的注册表键值:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e


此值是 TIME_WAIT 状态的最长时间。缺省为 240 秒,最低为 30 秒,最高为 300 秒。建议为 30 秒。

 

注释:

1 TCP 结束的过程如下 :

Server                             Client

-------------- FIN -------------->  server: fin_wait_1

<------------- ACK --------------- client: close_wait  server:fin_wait_2

<------------- FIN  --------------- client
发出 fin 之后就关闭


-------------- ACK ------------->  server
发出 ack 后进入 time_wait 状态

Time_Wait
的默认时间是 2 倍的 MLS ,就是 240 秒钟。 MLS TCP 片在网上的最长存活时间。
TIME_Wait
的主要作用是保证关闭的 TCP 端口不立即被使用。因为当网络存在延迟时,可能当某个端口被关闭后,网络中还有一些重传的 TCP 片在发向这个端口,如果这个端口立即建立新的 TCP 连接,则可能会有影响。所以使用 2 倍的 MSL 时间来限制这个端口立即被使用。

现在的问题在于, 4 分钟的时间有点长。
因此, Time_wait 的影响,我想,首先每个 TCP 连接都各自有个数据结构,叫 TCP Control Block.Time_wait 的时候这个数据结构没有被释放。所以当有太多的 TCP 连接时,内存可能会被占用很多。

 

 

 

2 To ValorZ TIME_WAIT 状态也称为 2MSL 等待状态,而不是 2MLS ,笔误吧!

每个 TCP 报文在网络内的最长时间,就称为 MSL Maximum Segment Lifetime ),它的作用和 IP 数据包的 TTL 类似。

RFC793
指出, MSL 的值是 2 分钟,但是在实际的实现中,常用的值有以下三种: 30 秒, 1 分钟, 2 分钟。

注意一个问题,进入 TIME_WAIT 状态的一般情况下是客户端,大多数服务器端一般执行被动关闭,不会进入 TIME_WAIT 状态,当在服务器端关闭某个服务再重新启动时,它是会进入 TIME_WAIT 状态的。

举例:
1.
客户端连接服务器的 80 服务,这时客户端会启用一个本地的端口访问服务器的 80 ,访问完成后关闭此连接,立刻再次访问服务器的 80 ,这时客户端会启用另一个本地的端口,而不是刚才使用的那个本地端口。原因就是刚才的那个连接还处于 TIME_WAIT 状态。
2.
客户端连接服务器的 80 服务,这时服务器关闭 80 端口,立即再次重启 80 端口的服务,这时可能不会成功启动,原因也是服务器的连接还处于 TIME_WAIT 状态。

分享到:
评论

相关推荐

    解决mysql出现大量TIME_WAIT

    为了解决大量TIME_WAIT状态导致的问题,可以通过修改Linux系统的内核参数来优化。具体步骤如下: 1. **编辑sysctl.conf文件**:使用文本编辑器打开`/etc/sysctl.conf`文件,添加或修改以下参数: - `...

    CentOS解决服务器存在大量time_wait的问题

    本文主要探讨了如何解决CentOS服务器上存在的大量TIME_WAIT TCP连接问题,这可能导致服务器连接数过多,进而引起服务假死。当服务器之间的通信过于频繁,如通过REST请求互相调用时,Java服务器可能无法及时回收TCP...

    服务器大量TIME_WAIT解决方法

    "服务器大量TIME_WAIT解决方法" 在 Linux 服务器中,TIME_WAIT 状态是一种常见的网络连接状态。然而,出现大量的 TIME_WAIT 状态可能会对服务器的性能产生影响。本文将详细介绍大量 TIME_WAIT 状态的成因、影响和...

    大量TIME_WAIT状态的连接解决方法

    ### 大量TIME_WAIT状态的连接解决方法 在Linux系统中,当服务器处理大量网络连接时,可能会遇到TIME_WAIT状态的连接过多导致的问题。TIME_WAIT是TCP连接的一个正常终止状态,但若数量过多则可能会影响到服务器性能...

    【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—实践篇 - slv

    【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法,这是一个关于网络编程和Linux系统配置的问题。在TCP/IP通信中,TIME_WAIT状态是TCP连接生命周期的一部分,用于确保...

    nginx+php产生大量TIME_WAIT连接解决办法1

    当服务器出现大量TIME_WAIT连接时,这可能会导致性能下降,甚至影响服务的可用性。TIME_WAIT状态是TCP连接生命周期的一部分,用于确保数据传输的可靠性,但过多的TIME_WAIT连接会消耗系统资源,特别是端口资源。 ...

    关于释放time_wait连接多的方案

    针对这一问题,可以通过调整Linux系统的内核参数来优化TIME_WAIT状态的处理,以下是一些具体的优化策略: ### 1. 开启SYN Cookies `net.ipv4.tcp_syncookies=1` 此参数用于在SYN队列满时启用SYN Cookies功能。在...

    CLOSE_WAIT网络连接无法释放问题解决

    CLOSE_WAIT网络连接无法释放问题解决 CLOSE_WAIT是一个常见的TCP连接状态,指的是服务器端的连接在客户端关闭后还未释放的情况。这种情况经常出现于客户端主动断开连接,但服务器端没有正确关闭连接的情况下。这种...

    减少Linux服务器过多的TIME_WAIT

    在Linux服务器环境中,当TCP/IP连接关闭后,服务器端的...通过上述方法,可以有效地管理和减少Linux服务器上的TIME_WAIT状态连接,优化服务器性能,尤其是对于处理大量并发连接的服务器,如Squid,这些调整尤为重要。

    解决linux下大量TIME WAIT的方法详解

    解决方法:通过修改Linux内核参数,可以减少linux服务器的IME_WAIT套接字数量。vi /etc/sysctl.conf增加以下几行: 代码如下:net.ipv4.tcp_fin_timeout = 30net.ipv4.tcp_keepalive_time = 1200...

    linux内核协议栈TCP time_wait原理、优化、副作用1

    在Cobar测试中,使用sysbench.short进行压力测试,发现即使在默认配置下,服务端的大量time_wait状态也会导致资源占用,影响性能。 综上所述,理解并优化Linux内核协议栈中的TCP time_wait状态是至关重要的,特别是...

    netstat显示 TIME-WAIT 的原因及解决办法

    当我们看到netstat输出中存在大量的TCP连接处于TIME_WAIT状态时,这通常意味着系统可能存在一些性能问题或者配置上的挑战。本篇文章将深入探讨TIME_WAIT状态的原因以及如何解决。 TCP(传输控制协议)是一种面向...

    探讨如何减少Linux服务器TIME_WAIT过多的问题

    然而,大量TIME_WAIT状态的连接可能导致端口资源的耗尽,特别是对于高并发的服务器,如Squid缓存服务器。在这种情况下,可以通过调整Linux内核参数来缓解问题: 1. `net.ipv4.tcp_syncookies = 1`:启用TCP同步...

    [服务器性能优化]Linux下高并发socket最大连接数和sysctl(time_wait)设置

    - `net.ipv4.tcp_fin_timeout`:控制连接在FIN_WAIT_2状态下等待的时间,可适当缩短以释放资源。 - `net.ipv4.tcp_keepalive_time`:设置空闲连接的探测间隔,防止死连接占用资源。 在进行这些调整时,务必了解它们...

    Time-wait详解和解决方案.docx

    - **后端服务器上的`TIME_WAIT`**:由于Nginx到后端服务器的连接频繁关闭与重建,后端服务器更容易出现大量的`TIME_WAIT`状态。这可能会导致服务器性能下降,尤其是在高并发场景下。 #### 四、解决方案 针对由`...

    linux sysctl

    ### Linux Sysctl与TIME_WAIT状态优化 #### 一、Sysctl概述 `sysctl`是Linux系统中的一个命令行工具,用于查看或更改内核参数。这些参数涉及到系统的多个方面,包括网络配置、内存管理、进程调度等。通过调整这些...

    linux内核参数

    TCP参数的调整在提高服务器性能方面起着重要作用,特别是当服务器面临大量TIME_WAIT状态连接时。TIME_WAIT状态的连接在断开后会占用端口资源一段时间,这可能导致端口资源耗尽,影响新连接的建立。通过调整以下内核...

Global site tag (gtag.js) - Google Analytics