`

Linux中大量TIME_WAIT的解决办法

    博客分类:
  • php
阅读更多
发布:theboy   来源:net   【大 中 小】
根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为

    根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒,TIME_WAIT状态下的socket不能被回收使用。

    具体现象是对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的socket,甚至比处于Established状态下的socket多的多,严重影响服务器的处理能力,甚至耗尽可用的socket,停止服务。 TIME_WAIT是TCP协议用以保证被重新分配的socket不会受到之前残留的延迟重发报文影响的机制,是必要的逻辑保证。

Windows:
   在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,添加名为TcpTimedWaitDelay的
DWORD键,设置为60,以缩短TIME_WAIT的等待时间

Linux:
     netstat -ae |grep mysql
tcp        0      0 aaaa:53045               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53044               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53051               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53050               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53049               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53048               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53055               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53054               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53053               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53052               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53059               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53058               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53057               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53056               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53063               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53062               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53061               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53060               192.168.12.3:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53067               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53066               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53065               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53064               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa53071               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53070               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53069               192.168.12.13:mysql           TIME_WAIT   root       0

发现系统存在大量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 时间

修改之后,再用
netstat -ae|grep mysql
tcp        0      0 aaaa:50408               192.168.12.13:mysql           ESTABLISHED nobody     3224651
tcp        0      0 aaaa:50417               192.168.12.13:mysql           ESTABLISHED nobody     3224673
tcp        0      0 aaaa:50419               192.168.12.13:mysql           ESTABLISHED nobody     3224675


发现大量的TIME_WAIT 已不存在,mysql进程的占用率很快就降下来的,各网站访问正常。
以上只是暂时的解决方法,最后仔细巡查发现是前天新上线的一个系统,程序代码中没有使用mysql.colse(),才导致大量的mysql  TIME_WAIT。

LVS中,对于TIME_WAIT,有单独的命令设置:
ipvsadm --set tcp tcpfin udp
该命令使用时,需要分别指定这3个超时值,比如:ipvsadm --set 60 30 60
ipvsadm -L --timeout
该命令显示当前设置的各超时值(试了下,貌似没什么效果)
本文出处参考:http://www.jbxue.com/LINUXjishu/4493.html
分享到:
评论

相关推荐

    解决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连接的一个正常终止状态,但若数量过多则可能会影响到服务器性能...

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

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

    关于释放time_wait连接多的方案

    在深入探讨如何有效释放TIME_WAIT状态的连接之前,我们首先需要理解TIME_WAIT状态的基本概念及其在TCP协议中的作用。TIME_WAIT是一种TCP连接的状态,当一个TCP连接被主动关闭时,客户端会进入TIME_WAIT状态,目的是...

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

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

    减少Linux服务器过多的TIME_WAIT

    在Linux服务器环境中,当TCP/IP连接关闭后,服务器端的端口可能会进入TIME_WAIT状态,这是TCP协议设计的一部分。TIME_WAIT状态的目的是确保网络中不存在旧的、可能重复的数据包,从而避免对新连接造成干扰,并确保...

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

    问题描述:在Linux系统中高并发的Squid服务器,TCP TIME_WAIT套接字数量经常达到两、三万,服务器很容易被拖死。解决方法:通过修改Linux内核参数,可以减少linux服务器的IME_WAIT套接字数量。vi /etc/sysctl.conf...

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

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

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

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

    探讨如何减少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详解和解决方案 #### 一、产生原因 在TCP协议中,当一个连接关闭时,会经历四个步骤的交互(通常称为四次挥手)以确保双方都已经停止发送数据并确认对方也已停止接收数据。在这个过程中,主动发起...

    linux sysctl

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

    linux内核参数

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

    教案之优化Linux的内核参数来提高服务器并发处理能力.pdf

    首先,针对大量TIME_WAIT状态的TCP连接导致的资源消耗问题,可以调整以下内核参数: 1. `net.ipv4.tcp_syncookies= 1`:启用SYNCookies功能,以防止由于SYN等待队列溢出而引起的SYN攻击。默认关闭,设置为1则开启。...

Global site tag (gtag.js) - Google Analytics