文档章节

Socket 连接问题之大量 TIME_WAIT

极光开发者服务
 极光开发者服务
发布于 07/23 10:10
字数 568
阅读 12
收藏 0

简评:最近项目就出现了大量短连接导致建立新连接超时问题,最后是通过维护长连接解决的。

代理或者服务器设备都有端口限制,如果使用 TCP 连接,连接数量达到端口限制,在这种情况下,将不能创建新的连接。

TIME-WAIT

这是 TCP 连接完全关闭前的最后一个状态,一个连接被关闭时,主动关闭的一端最后会进入 TIME_WAIT 状态,等待足够的时间以确保远程 TCP 接收到连接中断请求的确认,这个时间最大为四分钟,可调整。

如何检测

Kernel 信息: kernel: TCP: request_sock_TCP: Possible SYN flooding on port 8009. Sending cookies. Check SNMP counters.

检查连接 TIME_WAIT 状态个数 watch -n 1 "netstat -nt | grep TIME_WAIT | wc -l"

如果数量接近端口限制,则系统将受到此问题的影响 cat /proc/sys/net/ipv4/ip_local_port_range

解决办法

1.开启 TIME_WAIT 重用 默认情况下,Linux 会从临时端口范围中选择一个端口,临时端口范围在 32768 至 61000之 间。除非设置了 SO_REUSEADDR 标志,否则已绑定的 TCP 本地地址端口在关闭后一段时间内不可用。使用此标志时请谨慎,因为它会使 TCP 连接变的不可靠。

为了避免等待关闭同时启用 TIME_WAIT 的重用,可以向文件 /etc/sysctl.conf 添加以下行来开启: net.ipv4.tcp_tw_reuse = 1

2.短连接变长连接 如果有高并发请求功能,服务端是自己的服务器时,TCP 通信最好采用长连接,避免大量短连接每次建立/释放产生的各种开销;如果建立连接的目标服务器不是自己的,那就要考虑对方是否支持长连接方式。

原文链接: What you need to do if you see too many TIME_WAIT sockets

© 著作权归作者所有

极光开发者服务
粉丝 43
博文 240
码字总数 257306
作品 1
深圳
个人站长
私信 提问
Tcp连接出现大量ESTABLISHED连接解决方法

TCP状态转移要点 TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不 会被释放。网络服务器...

qianghong000
2017/11/09
0
0
mysql 大量time wait 解决办法

今天早上一上班,有同事就反映公司好几个网站都打不开,登陆数据库 服务器(windows),发现很卡,于是重启了下服务器,进入系统后,没过一会问题依旧,查看了下系统进程,发现mysql占用率达到9...

mj4738
2011/11/03
753
0
【Resin4】高并发调优过程

1、背景 团队有2台API服务,使用Resin4布署的web服务。刚上线调用方非常少,跑了几个月后,程序正常得很。 但是由于业务的发展,此API要给多个高并发的应用调用,级别在300w/天左右,瞬间请求...

想不通的250
2016/11/02
174
0
转--一个解除TCP连接的TIME_WAIT状态限制的简便方法

/************************************ * 版权声明 * 本文为本人原创,本人拥有此文的版权。鉴于本人持续受益于开源软件社区, * 本人声明:任何个...

长平狐
2012/09/03
275
0
close_wait状态和time_wait状态 (TCP连接)

不久前,我的Socket Client程序遇到了一个非常尴尬的错误。它本来应该在一个socket长连接上持续不断地向服务器发送数据,如果socket连接断开,那么程序会自动不断地重试建立连接。 有一天发现...

小报童
2013/12/23
14.7K
0

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
6
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
8
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
5
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部