在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
相关推荐
"解决TIME_WAIT过多造成的问题1" TIME_WAIT状态是TCP连接的四次挥手关闭协议中的一个重要状态,它存在的理由是为了确保TCP全双工连接的正常终止和避免老的重复分节在网络中消逝。 在TIME_WAIT状态中,客户端必须...
Windows time_wait过多解决办法解决办法: 修改注册表中的tcpip的TIMEWAIT回收时间属性值,需要重启后生效 在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,添加名为...
本文主要探讨了如何解决CentOS服务器上存在的大量TIME_WAIT TCP连接问题,这可能导致服务器连接数过多,进而引起服务假死。当服务器之间的通信过于频繁,如通过REST请求互相调用时,Java服务器可能无法及时回收TCP...
### 大量TIME_WAIT状态的连接解决方法 在Linux系统中,当服务器处理大量网络连接时,可能会遇到TIME_WAIT状态的连接过多导致的问题。TIME_WAIT是TCP连接的一个正常终止状态,但若数量过多则可能会影响到服务器性能...
【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法,这是一个关于网络编程和Linux系统配置的问题。在TCP/IP通信中,TIME_WAIT状态是TCP连接生命周期的一部分,用于确保...
本文讨论了在线上环境中,服务端长连接和客户端短连接配置不当导致Nginx服务器产生大量“TIME_WAIT”状态线程的问题,同时提供了问题的分析和解决方法。本文主要涉及的网络编程知识点包括长连接与短连接的定义和区别...
在遇到此类问题时,除了调整内核参数外,还可以考虑其他解决方案,如优化Nginx配置,减少不必要的连接,或者使用更高效的负载均衡策略。同时,定期检查和分析网络连接状态,及时发现和解决问题,也是维护服务器稳定...
### Apache Time_Wait 连接数太多问题及解决方法 #### 一、问题背景 在运维Apache服务器的过程中,经常遇到的一个问题是与负载均衡器之间的连接数异常增多,并且这些连接状态大多处于`TIME_WAIT`状态。这种情况会...
如果大量的 Time_wait 状态导致连接异常,有几种方法可以尝试解决问题。 减少 TIME_WAIT 超时时间:TIME_WAIT 状态是为了保证数据传输的完整性,因此在服务器端可以通过调整系统参数来减少 TIME_WAIT 超时时间。 ...
解决TIME_WAIT过多的方法: 1. **优化应用代码**:确保应用程序正确处理连接关闭,及时关闭不再使用的socket。 2. **增大端口范围**:增加系统允许的最大TCP连接数,可以通过调整`net.ipv4.ip_local_port_range`来...
标题 "tomcat-timewait-closewait.zip" 暗示了这个压缩包可能包含与Tomcat服务器在处理TCP连接时遇到的“Time_wait”和“Close_wait”状态相关的问题和解决方案。这两个术语是TCP/IP协议栈中的关键概念,尤其在高...
在Linux系统中,TCP连接管理中的TIME_WAIT状态是TCP协议的一部分,用于确保数据包的可靠传输。然而,在高并发环境中,如Squid代理服务器,可能会遇到大量的TIME_WAIT套接字,这可能导致服务器资源耗尽,性能下降,...
在本文中,我们将深入探讨这个问题的原因,并提供相应的解决方法。 首先,我们来理解一下MySQL中“Sleep”状态的含义。当一个客户端与MySQL服务器建立连接并执行SQL查询后,如果在指定时间内没有新的请求发送到...
通过分析这些文件,我们可以找到触发`CLOSE_WAIT`状态的具体情况,以及可能的解决方案。 解决`CLOSE_WAIT`问题的方法可能包括: 1. 调整TCP连接超时设置:增加TIME_WAIT和CLOSE_WAIT状态的超时时间,允许服务器有更...
总的来说,实时查看系统的TCP连接情况是维护网络安全、优化系统性能和解决问题的关键步骤。通过使用像Tcpview这样的工具,我们可以更好地理解网络通信状况,及时发现和处理潜在问题。同时,这也提醒我们,无论是在...
1. **并发连接过多**:大量的应用程序或用户同时尝试连接MySQL数据库,超过了系统设置的最大连接数`max_connections`。 2. **连接管理不当**:一些应用程序在完成工作后没有正确关闭连接,导致连接资源被占用,随着...
然而,增加连接数并非总是最佳解决方案,也可能带来问题。例如,过多的并发连接可能导致内存占用过大,影响系统性能。因此,在调整这些设置时,需要谨慎评估系统资源和应用需求,以找到合适的平衡点。 在实际操作中...
- `net.ipv4.tcp_max_tw_buckets`设置系统能同时保持的最大TIME_WAIT连接数量,合理设置可以避免TIME_WAIT状态过多导致的问题。 #### 四、示例配置 以下是一些具体的配置示例: ```bash # 编辑/etc/sysctl.conf...
三、常见连接问题及解决方案 1. **连接超时**:检查网络是否通畅,服务器是否正常运行,以及`wait_timeout`配置是否过短,适当延长等待时间。 2. **权限问题**:确认用户名和密码正确,并检查用户是否有足够的权限...