与TIME_WAIT相关的几个内核参数
问题
公司用浏览器访问线上服务一会失败一会成功,通过ssh连接服务器排查时发现ssh也是这样;
检查
抓包后发现建立连接的请求已经到了服务器,但它没有响应;
纠结了好久,后来在腾讯云技术支持及查了相关资料后发现是开启了net.ipv4.tcp_tw_recycle导致的,将其设为0即可解决;
原因
收集了几个与TIME_WAIT相关的内核参数:
net.ipv4.tcp_timestamps 默认开启(1),数据包加时间戳,需要两端都开启,可以防止高速率宽带时引起的序号回绕(序号不够用重新开始了),可以精确计算出RTT(往返时延)
net.ipv4.tcp_tw_reuse 默认关闭(0),允许TIME_WAIT的socket在超过1秒后重用,作用于发起连接的client端
net.ipv4.tcp_tw_recycle 默认关闭(0),允许快速回收处于TIME_WAIT的socket,作用于接受连接的server端
net.ipv4.ip_local_port_range 默认(32768 61000),可用的端口范围
net.ipv4.tcp_max_tw_buckets 默认(180000),允许处于TIME_WAIT状态socket的最大数量
若TIME_WAIT过多,可以开启reuse和recycle来快速回收,值得注意的一点是,reuse和recycle需要timestamps开启才会生效,当然timestamps一般都是开启的;
上面问题的原因是,当多个client通过nat方式联网时(一个局域网)它们的源ip相同但发出的时间戳很可能是乱的,而开启了recycle的server端就会丢弃这些混乱的数据包,于是现象就是有时能连上有时不行;
至于reuse,开启可能导致端口重用后还会收到上个socket延迟到达的数据,这个一般问题不大,应用程序都会校验;
虽然reuse在client端配置有效,而recycle在server端,但现在很多机器都是接受连接后再去连接别人,所以视情况而定吧。
总结
官方文档是不建议开启reuse和recycle的,因为违反了tcp协议,所以临时开启来解决异常情况后应及时关闭;
若TIME_WAIT过多导致系统很慢(Linux对其优化很好,且现在不缺这点内存,所以一般不会),可以降低tcp_max_tw_buckets,阿里云和腾讯云分别默认设置为了5000、65536;
若端口不足可以考虑加大 ip_local_port_range,最大不超过:1024 65535;
TIME_WAIT过多长远的解决方式还是通过程序开发方面:
1. 代码中及时正确的调用socket的close;
2. 让client端主动断开连接,而不是server端;
3. 尽量使用长连接,而不是短连接;
over
与TIME_WAIT相关的几个内核参数的更多相关文章
- 与TIME_WAIT相关的几个内核参数修改测试讨论结论
以下来结论自tcpcopy & gryphon讨论群 经过试验测试得出,不保证肯定正确. net.ipv4.tcp_tw_recycle net.ipv4.tcp_tw_reuse net ...
- netstat -na 查看有大量TIME_WAIT解决办法(修改内核参数)
# netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c 16 CLOSING 130 ESTABLISHED 298 FIN_WA ...
- Linux 内核参数 优化
Linux 内核参数 优化 目录 Linux 内核参数 优化 1.编辑内核配置文件 2.参数及简单说明 3.客户端的典型状态转移参数 4.TCP重传参数 5.实现Nginx高并发的内核参数优化 生效配 ...
- LINUX内核参数网络相关
有助于提高网络性能和吞吐量的参数 net.core.somaxconn = 128 已完成连接队列(completed connection queue) (1)三次握手已经完成,但还未被应用层接收( ...
- 发现大量的TIME_WAIT解决办法 -- 修改内核参数
今天早上一上班,有同事就反映公司好几个网站都打不开,登陆数据库 服务器(windows),发现很卡,于是重启了下服务器,进入系统后,没过一会问题依旧,查看了下系统进程,发现mysql占用率达到99%, ...
- Linux 内核参数 和 Oracle相关参数调整
Linux 内核参数 和 Oracle相关参数调整 分类: Oracle Basic Knowledge2009-10-14 12:23 9648人阅读 评论(0) 收藏 举报 oraclelinux ...
- linux下TCP/IP及内核参数优化调优(转)
Linux下TCP/IP及内核参数优化有多种方式,参数配置得当可以大大提高系统的性能,也可以根据特定场景进行专门的优化,如TIME_WAIT过高,DDOS攻击等等. 如下配置是写在sysctl.con ...
- Linux内核参数配置
Linux在系统运行时修改内核参数(/proc/sys与/etc/sysctl.conf),而不需要重新引导系统,这个功能是通过/proc虚拟文件系统实现的. 在/proc/sys目录下存放着大多数的 ...
- linux 内核参数优化
Sysctl命令及linux内核参数调整 一.Sysctl命令用来配置与显示在/proc/sys目录中的内核参数.如果想使参数长期保存,可以通过编辑/etc/sysctl.conf文件来实现. ...
随机推荐
- 源码包安装php7.2
含有的命令:yum,wget,tar,./configure,make,cp,ln,source,php -v ==安装== [root@ycj ~]# yum -y install libxml2 ...
- NoSQL数据库常见分类
1.列式数据库HBaseBigTable2.K-V数据库RedisCassandraLevelDBMemCacheEhcache3.文档数据库MongoDBCouchDB4.全文搜索引擎Elastic ...
- windows下创建.gitignore
网上搜索 .gitignore 的创建,很多linux上的,而且还一样,... 尝试了几次,windows可以这样写 .svn/ .settings/ .buildpath .project
- python3 参数*args 、 **args 在函数定义和调用中的应用
一.函数调用时 说明:*args 表示解包(解包 列表.元组.字符串类型) #定义函数cn_musql def cn_musql(host,port,user,pwd,db): print(host) ...
- js四则运算
这个bug是js固有的,浮点数精度不准,你可以用下面方法来解决,思路是先放大,求和.差.积等运算后再缩小. 如: //加法函数,用来得到精确的加法结果 //说明:javascript的加法结果会有误差 ...
- windows 启动停止 java进程
本案例以 xxx.jar 为列子 我们一般启动的jar 在任务管理器中查看进程都是javaw.exe ,无法用命令来 kill,所以我们得给自己的java 进程设置个新 title 1: 首先 ...
- HDD ,SSD和PCIE SSD性能测试
PCIE SSD * MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s] * KB = 1000 bytes, KiB = 10 ...
- weblogic的基础安装
安装java环境 不能使用centos自带的openjdk 必须使用源码安装 把下载的jdk-8u181-linux-x64.tar 解压到 /usr/src目录下 tar zxvf jd ...
- js比较两个单独的数组或对象是否相等
所谓js的中的传值,其实也就是说5种基本数据类型(null,undefind,boolean,number,string) 传引用也就是说的那个引用数据类型,(array和object) 基本数据类型 ...
- 使用TCP模拟登陆
import java.util.ArrayList;import java.util.List; public class UserDB { //使用Map存储账号密码 private static ...