`
phipray
  • 浏览: 65774 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

系统连接time wait过多问题解决方案

 
阅读更多

在nginx和Tomcat的使用过程中发现在高并发的情况下Tomcat会出现即使内存、CPU尚未达到瓶颈的情况下增加接入线程数还是会很容易出现拒绝服务,Tomcat的jvm里有大量的驻留请求线程,必须整链路重启才能清除掉这些驻留线程。

 

另外Tomcat有比较多断开连接的日志



  

 

 

通过这条命令可以检查:

#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

 

状态:描述
CLOSED:无连接是活动的或正在进行

 


LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

 

如发现系统存在大量TIME_WAIT状态的连接,

 

1  调整nginx和Tomcat的参数

增加keepalived配置减少连接断开

 

nginx:

#对前

 fastcgi_intercept_errors on;

 client_body_timeout 10;

 client_header_timeout 10;

 send_timeout 10;

 keepalive_timeout  50;

 client_body_buffer_size  4k;

 

 client_header_buffer_size 1k;

#对后

proxy_connect_timeout 60;

proxy_send_timeout 60;

 

proxy_read_timeout 60;

proxy_buffer_size 512k;

proxy_buffers 6 512k;

proxy_busy_buffers_size 512k;

 

proxy_temp_file_write_size 512k;

 

#在upstream配置中设置

keepalive 120;

 

Tomcat:

protocol="org.apache.coyote.http11.Http11Nio2Protocol"

connectionTimeout="15000" 

acceptCount="100"

acceptorThreadCount="2"

keepAliveTimeout="-1"

maxKeepAliveRequests="200"

maxThreads="300"

minSpareThreads="25"

maxPostSize="0"

 

redirectPort="8443"

 

 

2  通过调整内核参数解决,
vim /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

net.ipv4.tcp_timestamps = 1

 

net.ipv4.tcp_keepalive_time = 1200 

#net.ipv4.ip_local_port_range = 65000 

net.ipv4.tcp_max_syn_backlog = 8192

net.ipv4.tcp_max_tw_buckets = 5000

 

 

#net.bridge.bridge-nf-call-ip6tables = 0

#net.bridge.bridge-nf-call-iptables = 0

#net.bridge.bridge-nf-call-arptables = 0

 

 

然后执行 /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 时间

 

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.tcp_tw_reuse = 1 reuse是表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接;

net.ipv4.tcp_tw_recycle = 1  recyse是加速TIME-WAIT sockets回收。

 

 参考自:

http://kerry.blog.51cto.com/172631/105233/

http://blog.csdn.net/gloria_y/article/details/11733049

http://www.cnblogs.com/discuss/articles/1866851.html

 

 

  • 大小: 71.6 KB
分享到:
评论

相关推荐

    解决TIME_WAIT过多造成的问题1

    "解决TIME_WAIT过多造成的问题1" TIME_WAIT状态是TCP连接的四次挥手关闭协议中的一个重要状态,它存在的理由是为了确保TCP全双工连接的正常终止和避免老的重复分节在网络中消逝。 在TIME_WAIT状态中,客户端必须...

    windows 2008 R2解决socket连接不释放补丁包_time-wait过多注册表改.rar

    Windows time_wait过多解决办法解决办法: 修改注册表中的tcpip的TIMEWAIT回收时间属性值,需要重启后生效 在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,添加名为...

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

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

    大量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产生大量\"TIME_WAIT\"状态的线程”的问题分析解决

    本文讨论了在线上环境中,服务端长连接和客户端短连接配置不当导致Nginx服务器产生大量“TIME_WAIT”状态线程的问题,同时提供了问题的分析和解决方法。本文主要涉及的网络编程知识点包括长连接与短连接的定义和区别...

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

    在遇到此类问题时,除了调整内核参数外,还可以考虑其他解决方案,如优化Nginx配置,减少不必要的连接,或者使用更高效的负载均衡策略。同时,定期检查和分析网络连接状态,及时发现和解决问题,也是维护服务器稳定...

    apache time_wait连接数太多问题解决方法

    ### Apache Time_Wait 连接数太多问题及解决方法 #### 一、问题背景 在运维Apache服务器的过程中,经常遇到的一个问题是与负载均衡器之间的连接数异常增多,并且这些连接状态大多处于`TIME_WAIT`状态。这种情况会...

    测试解决TCP TIME-WAIT状态导致多链接失败问题.rar

    如果大量的 Time_wait 状态导致连接异常,有几种方法可以尝试解决问题。 减少 TIME_WAIT 超时时间:TIME_WAIT 状态是为了保证数据传输的完整性,因此在服务器端可以通过调整系统参数来减少 TIME_WAIT 超时时间。 ...

    系统调优,你所不知道的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协议栈中的关键概念,尤其在高...

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

    在Linux系统中,TCP连接管理中的TIME_WAIT状态是TCP协议的一部分,用于确保数据包的可靠传输。然而,在高并发环境中,如Squid代理服务器,可能会遇到大量的TIME_WAIT套接字,这可能导致服务器资源耗尽,性能下降,...

    MySQL Sleep连接过多问题解决方法

    在本文中,我们将深入探讨这个问题的原因,并提供相应的解决方法。 首先,我们来理解一下MySQL中“Sleep”状态的含义。当一个客户端与MySQL服务器建立连接并执行SQL查询后,如果在指定时间内没有新的请求发送到...

    close_wait_0306 close_wait_0306 close_wait_0306 close_wait_0306

    通过分析这些文件,我们可以找到触发`CLOSE_WAIT`状态的具体情况,以及可能的解决方案。 解决`CLOSE_WAIT`问题的方法可能包括: 1. 调整TCP连接超时设置:增加TIME_WAIT和CLOSE_WAIT状态的超时时间,允许服务器有更...

    查看系统的TCP连接情况

    总的来说,实时查看系统的TCP连接情况是维护网络安全、优化系统性能和解决问题的关键步骤。通过使用像Tcpview这样的工具,我们可以更好地理解网络通信状况,及时发现和处理潜在问题。同时,这也提醒我们,无论是在...

    关于mysql提示too many connections问题解决方法.doc

    1. **并发连接过多**:大量的应用程序或用户同时尝试连接MySQL数据库,超过了系统设置的最大连接数`max_connections`。 2. **连接管理不当**:一些应用程序在完成工作后没有正确关闭连接,导致连接资源被占用,随着...

    修改连接数,查看连接数

    然而,增加连接数并非总是最佳解决方案,也可能带来问题。例如,过多的并发连接可能导致内存占用过大,影响系统性能。因此,在调整这些设置时,需要谨慎评估系统资源和应用需求,以找到合适的平衡点。 在实际操作中...

    linux sysctl

    - `net.ipv4.tcp_max_tw_buckets`设置系统能同时保持的最大TIME_WAIT连接数量,合理设置可以避免TIME_WAIT状态过多导致的问题。 #### 四、示例配置 以下是一些具体的配置示例: ```bash # 编辑/etc/sysctl.conf...

    mysql的连接数据问题

    三、常见连接问题及解决方案 1. **连接超时**:检查网络是否通畅,服务器是否正常运行,以及`wait_timeout`配置是否过短,适当延长等待时间。 2. **权限问题**:确认用户名和密码正确,并检查用户是否有足够的权限...

Global site tag (gtag.js) - Google Analytics