设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 4148|回复: 0

Linux 内核优化并发开启tcp快速回收TIME_WAIT

[复制链接]
 成长值: 333

签到天数: 4736 天

[LV.Master]伴坛终老

发表于 2017/6/21 00:32 | 显示全部楼层 |阅读模式 |Google Chrome 59.0.3071.104|Windows 10
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
Linux 内核优化并发开启tcp快速回收TIME_WAIT

  1. netstat -an|grep TIME_WAIT |wc -l
复制代码

查看有多少

[root@MyCloudServer ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 255166
FIN_WAIT1 12170
ESTABLISHED 43591
FIN_WAIT2 27756
SYN_RECV 866
CLOSING 111
LAST_ACK 84
[root@MyCloudServer ~]#


vi /etc/sysctl.conf
增加net.ipv4.tcp_tw_recycle = 1
表示开启TCP连接中TIME_WAIT sockets的快速回收,默认为0,表示关闭。实在吃不消不得已才开启,毕竟可能会引起timed_out连接失败的问题甚至tcp长连接突然访问中断导致断流。

net.ipv4.tcp_tw_reuse = 1
Tcp TIME_WAIT 端口重用,推荐打开,默认为0,表示关闭,打开后允许将TIME_WAIT sockets重新用于新的TCP连接。

net.ipv4.tcp_fin_timeout = 10
修改系統默认的 TIMEOUT 时间,默认为60,这个参数决定了它保持在FIN_WAIT2状态的时间。

net.ipv4.tcp_keepalive_time = 30
表示当keepalive启用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为30秒。

net.ipv4.ip_local_port_range = 1025 64511
表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1025到64511。

net.ipv4.tcp_max_syn_backlog = 8192
表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接(SYN_RECV)的网络连接数。使用ss命令查看第四列观察发送队列情况,如果当前已启用syncookie,那么设置max_syn_backlog值无效化
通过dmesg可以确认是否有该情况发生 dmesg | grep "TCP: drop open request from",可以用命令 netstat -ant|grep SYN_RECV|wc -l 查看具体大小,大多数情况下这个值应该是0或很小,因为半连接状态从第一次握手完成时进入,第三次握手完成后退出,正常的网络环境中这个过程发生很快,如果这个值较大,服务器极有可能受到了SYN Flood攻击。
另外,上述行为受到内核参数tcp_syncookies的影响,若启用syncookie机制,当半连接队列溢出时,并不会直接丢弃SYN包,而是回复带有syncookie的SYC+ACK包,设计的目的是防范SYN Flood造成正常请求服务不可用。

net.ipv4.tcp_max_tw_buckets = 5000
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息/var/log/messages(TCP: time wait bucket table overflow)。默认为180000,改为5000。

net.ipv4.tcp_syn_retries = 1
对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5

net.ipv4.tcp_window_scaling = 0
TCP窗口自动调节,如果TCP窗口最大超过65535(64K),必须设置该数值为1,否则访问速度会严重下降,默认值1,设置0关闭。

net.ipv4.tcp_sack = 0
有选择的应答,默认1,设置0关闭。

懒人一键吧
  1. echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
  2. echo "net.ipv4.tcp_fin_timeout = 10" >> /etc/sysctl.conf
  3. echo "net.ipv4.tcp_max_tw_buckets = 5000" >> /etc/sysctl.conf
  4. echo "net.ipv4.tcp_keepalive_time = 30" >> /etc/sysctl.conf
  5. echo "net.ipv4.ip_local_port_range = 1025 64511" >> /etc/sysctl.conf
  6. echo "net.ipv4.tcp_max_syn_backlog = 8192" >> /etc/sysctl.conf
复制代码



然后执行 /sbin/sysctl -p 让参数生效


[root@MyCloudServer ~]#  netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 3919
FIN_WAIT1 2555
FIN_WAIT2 297
ESTABLISHED 42244
SYN_RECV 614
CLOSING 172
LAST_ACK 117
[root@MyCloudServer ~]#


一个高并发丢包的案例一
https://bbs.itzmx.com/thread-88435-1-1.html

一个高并发丢包的案例二
https://bbs.itzmx.com/thread-100689-1-1.html

[发帖际遇]: 小樱 乐于助人,奖励 8 贡献. 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2024/12/22 21:28 , Processed in 0.156735 second(s), 22 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

快速回复 返回顶部 返回列表