欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

短连接导致端口耗尽

程序员文章站 2022-06-26 19:12:36
...

 

场景回放

  • A机器的服务请求B机器的服务
  • 短连接请求,动态创建连接端口
  • A机器服务会主动关闭连接
  • 短时间内高并发请求
  • A机器的tcpssports被耗尽了
  • 大部分网络连接处time_wait状态

短连接导致端口耗尽
            
    
    博客分类: 操作系统TCP socketCentOS 

 

内核配置

net.ipv4.ip_local_port_range = 1024     65000
net.ipv4.ip_local_reserved_ports = 5710-5739,15710-15739

 

 

 

端口耗尽

  • 主动调用close()/shutdown()断开连接,收到对方确认后状态变为TIME_WAIT。
  • TCP协议TIME_WAIT状态会一直持续2MSL,TIME_WAIT有时间窗口,Linux默认是60秒
  • TIME_WAIT状态的连接占用的资源不会被内核释放
  • TIME_WAIT状态转换到CLOSE状态后资源才会真正被系统收回。

短连接导致端口耗尽
            
    
    博客分类: 操作系统TCP socketCentOS 

 

内核参数优化

客户端内核参数优化

#开启TCP连接中TIME-WAIT套接字的快速回收
net.ipv4.tcp_tw_recycle=1   

#开启重用,表示是否允许将处于TIME-WAIT状态的socket(TIME-WAIT的端口)用于新的TCP连接 。
net.ipv4.tcp_tw_reuse=1     

#对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间(秒)。
#对方可能会断开连接或一直不结束连接或不可预料的进程死亡。
net.ipv4.tcp_fin_timeout=5    

#TCP时间戳(会在TCP包头增加12个字节),以一种比重发超时更精确的方法(参考RFC 1323)
#来启用对RTT 的计算,为实现更好的性能应该启用这个选项。
net.ipv4.tcp_timestamps=1  

#收缩TIME_WAIT状态socket的回收时间窗口 
net.ipv4.tcp_tw_timeout=3   

 

 

 服务端内核参数优化

#定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。
sysctl net.core.somaxconn=1024  
        
#传输缓区长度大小
ifconfig eth0 txqueuelen 5000           
echo "/sbin/ifconfig eth0 txqueuelen 5000" >> /etc/rc.local

#在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目 
sysctl net.core.netdev_max_backlog=2000 

#对于还未获得对方确认的连接请求,可保存在队列中的最大数目。如果服务器出现过载,可以尝试增加这个数字。 
sysctl net.ipv4.tcp_max_syn_backlog=2048 
 

 

参考资料:

https://en.wikipedia.org/wiki/Transmission_Control_Protocol?spm=5176.100239.blogcont52884.5.JrKkjE

http://www.medianet.kent.edu/techreports/TR2005-07-22-tcp-EFSM.pdf

http://*.com/questions/410616/increasing-the-maximum-number-of-tcp-ip-connections-in-linux/3923785#3923785

http://www.cnblogs.com/fczjuever/archive/2013/04/05/3000680.html

http://www.cnblogs.com/fczjuever/archive/2013/04/17/3026694.html

 

  • 短连接导致端口耗尽
            
    
    博客分类: 操作系统TCP socketCentOS 
  • 大小: 69.3 KB
  • 短连接导致端口耗尽
            
    
    博客分类: 操作系统TCP socketCentOS 
  • 大小: 172.3 KB
相关标签: socket CentOS