网络优化之net.ipv4.tcp_tw_recycle和tcp_tw_reuse参数
linux TIME_WAIT 相关参数:
net.ipv4.tcp_tw_reuse = 0 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭 net.ipv4.tcp_tw_recycle = 0 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭 net.ipv4.tcp_fin_timeout = 60 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间(可改为30,一般来说FIN-WAIT-2的连接也极少)
注意:
- 不像Windows 可以修改注册表修改2MSL 的值,linux 是没有办法修改MSL的,tcp_fin_timeout 不是2MSL 而是Fin-WAIT-2状态.
- tcp_tw_reuse 和SO_REUSEADDR 是两个完全不同的东西
查看参数:
cat/proc/sys/net/ipv4/tcp_tw_recycle (表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭)
cat /proc/sys/net/ipv4/tcp_tw_reuse
修改参数:
sudo bash -c 'echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse'
sudo bash -c 'echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle'
1. tw_reuse,tw_recycle 必须在客户端和服务端timestamps 开启时才管用(默认打开)
2. tw_reuse 只对客户端起作用,开启后客户端在1s内回收
3. tw_recycle 对客户端和服务器同时起作用,开启后在 3.5*RTO 内回收,RTO 200ms~ 120s 具体时间视网络状况。
内网状况比tw_reuse 稍快,公网尤其移动网络大多要比tw_reuse 慢,优点就是能够回收服务端的TIME_WAIT数量
对于客户端
1. 作为客户端因为有端口65535问题,TIME_OUT过多直接影响处理能力,打开tw_reuse 即可解决,不建议同时打开tw_recycle,帮助不大。
2. tw_reuse 帮助客户端1s完成连接回收,基本可实现单机6w/s请求,需要再高就增加IP数量吧。
3. 如果内网压测场景,且客户端不需要接收连接,同时tw_recycle 会有一点点好处。
4. 业务上也可以设计由服务端主动关闭连接
对于服务端
1. 打开tw_reuse无效
2. 线上环境 tw_recycle 不要打开
服务器处于NAT 负载后,或者客户端处于NAT后(这是一定的事情,基本公司家庭网络都走NAT);
公网服务打开就可能造成部分连接失败,内网的话到时可以视情况打开;
像我所在公司对外服务都放在负载后面,负载会把timestamp 都给清空,好吧,就算你打开也不起作用。
3. 服务器TIME_WAIT 高怎么办
不像客户端有端口限制,处理大量TIME_WAIT Linux已经优化很好了,每个处于TIME_WAIT 状态下连接内存消耗很少,
而且也能通过tcp_max_tw_buckets = 262144 配置最大上限,现代机器一般也不缺这点内存。
下面像我们一台每秒峰值1w请求的http 短连接服务,长期处于tw_buckets 溢出状态,
tw_socket_TCP 占用70M, 因为业务简单服务占用CPU 200% 运行很稳定。
slabtop
262230 251461 95% 0.25K 17482 15 69928K tw_sock_TCP
ss -s Total: 259 (kernel 494) TCP: 262419 (estab 113, closed 262143, orphaned 156, synrecv 0, timewait 262143/0), ports 80Transport Total IP IPv6 * 494 - - RAW 1 1 0 UDP 0 0 0 TCP 276 276 0 INET 277 277 0 FRAG 0 0 0
唯一不爽的就是:
系统日志中overflow 错误一直再刷屏,也许该buckets 调大一下了
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
5. 业务上也可以设计由客户端主动关闭连接
原理分析
1. MSL 由来
发起连接关闭方回复最后一个fin 的ack,为避免对方ack 收不到、重发的或还在中间路由上的fin 把新连接给干掉了,等个2MSL,4min。
也就是连接有谁关闭的那一方有time_wait问题,被关那方无此问题。
2. reuse、recycle
通过timestamp的递增性来区分是否新连接,新连接的timestamp更大,那么小的timestamp的fin 就不会fin掉新连接。
3. reuse
通过timestamp 递增性,客户端、服务器能够处理outofbind fin包
4. recycle
对于服务端,同一个src ip,可能会是NAT后很多机器,这些机器timestamp递增性无可保证,服务器会拒绝非递增请求连接。
细节之处还得好好阅读tcp 协议栈源码了
【案例分析1】
最近发现几个监控用的脚本在连接监控数据库的时候偶尔会连不上,报错:
Couldn't connect to host:3306/tcp: IO::Socket::INET: connect: Cannot assign requested address
查看了一下发现系统中存在大量处于TIME_WAIT状态的tcp端口
$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 50013
ESTABLISHED 27
SYN_RECV 1
由于要监控的主机太多,监控的agent可能在短时间内创建大量连接到监控数据库(MySQL)并释放造成的。在网上查阅了一些tcp参数的相关资料,最后通过修改了几个系统内核的tcp参数缓解了该问题:
#vi /etc/sysctl.conf
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
#sysctl -p
其中:
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
修改完成并生效后,系统中处于TIME_WAIT状态的tcp端口数量迅速下降到100左右:
$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 82
ESTABLISHED 36
简单记录于此,备忘。
【案例分析2】
网上的帖子,大多都写开启net.ipv4.tcp_tw_recycle这个开关,可以快速回收处于TIME_WAIT状态的socket(针对Server端而言)。
而实际上,这个开关,需要net.ipv4.tcp_timestamps(默认开启的)这个开关开启才有效果。
更不为提到却很重要的一个信息是:当tcp_tw_recycle开启时(tcp_timestamps同时开启,快速回收socket的效果达到),对于位于NAT设备后面的Client来说,是一场灾难——会导到NAT设备后面的Client连接Server不稳定(有的Client能连接server,有的Client不能连接server)。也就是说,tcp_tw_recycle这个功能,是为“内部网络”(网络环境自己可控——不存在NAT的情况)设计的,对于公网,不宜使用。
通常,“回收”TIME_WAIT状态的socket是因为“无法主动连接远端”,因为无可用的端口,而不应该是要回收内存(没有必要)。即,需求是“Client”的需求,Server会有“端口不够用”的问题吗?除非是前端机,需要大量的连接后端服务——即充当着Client的角色。
正确的解决这个总是办法应该是:
net.ipv4.ip_local_port_range = 9000 6553 #默认值范围较小
net.ipv4.tcp_max_tw_buckets = 10000 #默认值较小,还可适当调小
net.ipv4.tcp_tw_reuse = 1 #
net.ipv4.tcp_fin_timeout = 10 #
---------------------
作者:天府云创
来源:CSDN
原文:https://blog.csdn.net/enweitech/article/details/79261439
版权声明:本文为博主原创文章,转载请附上博文链接!
转载于:https://www.cnblogs.com/ppp1314520818/p/10842037.html
网络优化之net.ipv4.tcp_tw_recycle和tcp_tw_reuse参数相关推荐
- 网络优化之net.ipv4.tcp_tw_recycle参数
本文为翻译英文BLOG<Coping with the TCP TIME-WAIT state on busy Linux servers>,(http://vincent.bernat. ...
- linux 网络优化 net.ipv4.tcp_tw_recycle 简介
[案例分析1] 最近发现几个监控用的脚本在连接监控数据库的时候偶尔会连不上,报错: Couldn't connect to host:3306/tcp: IO::Socket::INET: conn ...
- linux内核网络参数tcp_tw_recycle 和 tcp_tw_reuse 你搞清楚了吗?
Docker 技术鼻祖系列 原文链接:https://blog.csdn.net/u010278923/article/details/102663535 今天在生产环境遇到了一个奇怪的网络现象,通过 ...
- linux内net.ipv4.tcp_tw_recycle参数一定不要启用
linux内net.ipv4.tcp_tw_recycle参数一定不要启用 net.ipv4.tcp_tw_recycle = 0 本文为转载译者achejq博客的原文,目的是为了加深自己知识点的记忆 ...
- 不要在linux上启用net.ipv4.tcp_tw_recycle参数
本文为翻译英文BLOG<Coping with the TCP TIME-WAIT state on busy Linux servers>,但并非完整的翻译,译者CFC4N对原文理解后, ...
- net.ipv4.tcp_tw_recycle
[+] 本文为翻译英文BLOG< Coping with the TCP TIME-WAIT state on busy Linux servers >,但并非完整的翻译,译者CFC4N对 ...
- tcp_tw_recycle和tcp_tw_reuse
tcp TIME_WAIT 进入主题前必须做铺垫啊,讲讲TIME_WAIT.因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都需要关闭.先发FIN包的一方执行的是主动关闭:后发FIN包的一方 ...
- 神经网络中的网络优化和正则化(二)之参数初始化/数据预处理/逐层归一化
转载请注明出处:https://thinkgamer.blog.csdn.net/article/details/101026786 博主微博:http://weibo.com/234654758 G ...
- 聊聊数据库~5.SQL运维上篇
1.6.SQL运维篇 运维这块逆天只能说够用,并不能说擅长,所以这篇就当抛砖之用,欢迎补充和纠错 PS:再说明下CentOS优化策略这部分的内容来源:首先这块逆天不是很擅长,所以主要是参考网上的DBA ...
最新文章
- java 高并发第三阶段实战_JAVA多线程编程实战视频-第三阶段(共80节)
- 计划策略70 之 MIXED MRP(mixed MRP)
- C#最佳工具集合:IDE、分析、自动化工具等
- 70. 爬楼梯 golang 斐波那契数列
- java instanceof 继承_Java中的instanceof关键字
- 代码创建listview android,android ListView 示例4 使用 SimpleAdapter 创建 ListView
- jquery取得text,areatext,radio,checkbox,select的值
- ASP.Net的HtmlHelper和UrlHelper
- 起名源码PHP(宝宝取名源码)
- 新手如何快速上手双拼,提高打字速度-by小鹤双拼输入法QQ群友-弧
- U盘量产工具相关知识2
- 博士申请 | 美国埃默里大学招收2022秋季入学机器学习方向全奖博士生
- 2022电赛省一-小车跟随行驶系统(C题)
- usgs dem 导入matlab 程序,用GDAL打开从USGS下载的img影像文件
- Api升级28适配填坑(一)
- 〖Python全栈白宝书-免费版⑲〗- 字符串的编码格式
- 男教师的着装面试礼仪
- 联合应用开发 JAD
- CCF-CSP 202112-3 登机牌条码 100分
- 网络报修信息管理代码java_javaweb在线报修维修系统、java+ssh+mysql实现
热门文章
- 服务 700+ 厂商,接入 4000+游戏,数数科技 C+ 轮再融 1 亿元
- 微型机器行业调研报告 - 市场现状分析与发展前景预测
- 今日份CSS学习:font的相关属性
- HIVE HWI 搭建过程
- 灵魂之问:机器人编程学习的是什么?/机器人课与科学课/机器人课和编程课/乐高机器人学的是什么?
- 【小沐学Unity3d】Unity3d导入3D模型
- Fabric中PBFT源码解读——Checkpoint机制
- 2020年:maven配置最新阿里云镜像,以及在IDEA中的设置
- mysql查询表空间名称_表空间常用查询
- 一种新型双频双圆极化微带天线的设计