`

解决服务器出现大量CLOSE_WAIT和TIME_WAIT连接的方法

    博客分类:
  • web
 
阅读更多
这两天发现数据库的cpu使用率一直居高不下,服务器负载也一直很高
在mysql里show processlist发现连接数也不多
也没有锁表现象,可资源使用一直很高
查了下连接不得了了啊

netstat -anl|grep :3306
总连接数有几百,其中有大量的CLOSE_WAIT状态的连接
看了下数据库的连接超时设置

set global wait_timeout=120
再来改一下/etc/sysctl.conf,在最后加入
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_keepalive_intvl = 2

使用sysctl -p使配置生效
而会发现会出现大量的TIME_WAIT的连接 还要再修改下linux的/etc/sysctl.conf配置
在最后加入
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1

说明:
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 = 30
表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

net.ipv4.tcp_keepalive_time = 1200
表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。

net.ipv4.ip_local_port_range = 1024 65000
表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。

net.ipv4.tcp_max_syn_backlog = 8192
表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_max_tw_buckets = 5000
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

net.ipv4.route.gc_timeout = 100
路由缓存刷新频率, 当一个路由失败后多长时间跳到另一个默认是300

net.ipv4.tcp_syn_retries = 1
对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右。

现在再来看下连接信息:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
一边偷着乐吧,连接在慢慢减少,负载也一减少
分享到:
评论

相关推荐

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

    CLOSE_WAIT问题的解决需要确保服务器端正确关闭连接,以释放连接资源。同时,也需要注意编程的重要性,以避免CLOSE_WAIT状态的出现。 知识点: 1. CLOSE_WAIT状态的定义和产生原因 2. CLOSE_WAIT状态的解决方法 3....

    TCP状态迁移,CLOSE_WAIT & FIN_WAIT2 的问题解决

    在 TCP 连接中,客户端和服务器端都可以处于不同的状态,例如 ESTABLISHED、CLOSE_WAIT、FIN_WAIT_1、FIN_WAIT_2、TIME_WAIT 等 trạng thái。 CLOSE_WAIT 状态是 TCP 连接中的一种状态,它表示服务器端已经收到了...

    CLOSE_WAIT错误详解

    在TCP/IP协议栈中,CLOSE_WAIT是一个非常关键的连接状态,它涉及到客户端和服务器之间的通信。这个状态在处理网络连接时可能出现的问题时尤其重要。本文将深入探讨CLOSE_WAIT错误的含义、原因以及如何解决。 首先,...

    close_wait_0306 close_wait_0306 close_wait_0306 close_wait_0306

    在描述中反复出现"close_wait_0306",这可能暗示着一个持续的或频繁出现的网络连接问题,可能是由于服务器程序处理关闭连接的方式不当,或者是系统资源管理的问题,例如半打开连接(half-closed connections)的堆积...

    tcp连接出现close_wait状态?_tcp_close_

    TCP连接有多种状态,包括LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED、CLOSE_WAIT、FIN_WAIT_1、FIN_WAIT_2、TIME_WAIT等。每个状态都代表了连接的不同生命周期阶段。Close_Wait是服务器端接收到客户端的FIN( ...

    系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT1

    解决TIME_WAIT过多的方法: 1. **优化应用代码**:确保应用程序正确处理连接关闭,及时关闭不再使用的socket。 2. **增大端口范围**:增加系统允许的最大TCP连接数,可以通过调整`net.ipv4.ip_local_port_range`来...

    tomcat-timewait-closewait.zip

    标题 "tomcat-timewait-closewait.zip" 暗示了这个压缩包可能包含与Tomcat服务器在处理TCP连接时遇到的“Time_wait”和“Close_wait”状态相关的问题和解决方案。这两个术语是TCP/IP协议栈中的关键概念,尤其在高...

    TIME_WAIT.rar_C-means_linux 网络状态_linux c wait_tcp_unix 网络编程

    在Linux系统中,进行网络编程时,TCP连接的TIME_WAIT状态是至关重要的一个环节。TIME_WAIT状态是TCP连接生命...通过学习TIME_WAIT状态的原理和处理方法,开发者可以更好地设计和优化网络服务,确保其稳定性和可靠性。

    Netstat命令详解如何关闭TIME_WAIT连接如何查看nginx的访问流量[归类].pdf

    4. 关闭 TIME_WAIT 连接:使用 netstat -ant | grep TIME_WAIT | awk '{print $2}' | xargs kill -9 命令可以关闭 TIME_WAIT 连接。 网络连接状态详解: 网络连接状态可以分为 12 种可能的状态,前面 11 种是按照 ...

    TCP_SYNC基础

    如果对方在第三次握手的时候出问题,例如发 FIN 包的时候,不知道什么原因丢了这个包,客户端会一直处在 FIN_WAIT_2 状态,服务器端则处在 CLOSE_WAIT 状态。如果这种情况持续很长时间,系统可能会崩溃。 问题分析 ...

    [Socket]CLOSEWAIT.rar_Help!

    4. **资源管理**:使用连接池可以有效管理Socket连接,避免大量并发连接导致的CLOSE_WAIT状态积累。 5. **监控与调试**:利用网络工具(如netstat命令)监控TCP连接状态,定位问题所在。 总的来说,Socket编程中的...

    tcp连接状态详解 描述了tcp协议常用的命令

    它可以由多个状态转移到达,包括 FIN_WAIT_2、CLOSING 和 FIN_WAIT_1 状态。TIME_WAIT 状态的存在是为了确保 TCP 连接的可靠终止和允许老的重复分节在网络中消逝。 了解 TCP 连接状态是非常重要的,因为它可以帮助...

    c++《网络编程》服务器

    导致客户TCP发送一个FIN给服务器,服务器则以一个ACK响应,此时服务器处于CLOSE_WAIT状态,客户端处于FIN_WAIT_2状态。服务器接收到FIN,子进程中止。子进程中止内核关闭所有子进程打开的描述符导致服务器向客户端...

    Linux服务器上11种网络连接状态 和 TCP L.doc

    Linux服务器上的网络连接状态是监控和管理服务器性能的关键部分,特别是对于处理大量网络通信的服务而言。TCP(传输控制协议)是互联网上应用最广泛的协议之一,它为两个通信端点提供可靠的、面向连接的数据传输服务...

    linux 下tcp参数优化

    例如,可以通过修改 tcp_keepalive_*系列参数来解决 CLOSE_WAIT 状态的问题。此外,还可以通过修改 inet_peer_gc_maxtime、inet_peer_gc_mintime 等参数来调整 INET peer storage 的大小和时间间隔。 Linux 下 TCP ...

    tcp状态解析和windowsio说明

    主动关闭可能会经过FIN_WAIT_1、FIN_WAIT_2、TIME_WAIT状态,而被动关闭则经历CLOSE_WAIT、LAST_ACK状态。在处理TIME_WAIT状态时,需要注意避免端口冲突,可以使用SO_REUSEADDR选项来允许立即重用套接字地址,或者...

    Wireshark分析TCP连接断开过程分析与总结.docx

    1. FIN_WAIT_1 状态:当 SOCKET 在 ESTABLISHED 状态时,它想主动关闭连接,向对方发送了 FIN 报文,此时该 SOCKET 即主动断开连接方(客户端)进入到 FIN_WAIT_1 状态,对方进入被动关闭 CLOSE_WAIT 状态。...

Global site tag (gtag.js) - Google Analytics