[转帖]net.ipv4.tcp_max_tw_buckets 配置说明

net,ipv4,tcp,max,tw,buckets,配置,说明 · 浏览次数 : 0

小编点评

**TIME_WAIT 参数的作用:** * 当 `tcp_max_tw_buckets` 等于 `tcp_max_tw_buckets` 时,如果新来的 TIME_WAIT 连接超过了 `tcp_max_tw_buckets`,就不会产生新的 TIME_WAIT 连接。 **建议:** * 在只有 60000 多个端口可用的情况下,配置 `tcp_max_tw_buckets` 为 55000。 * `tcp_max_tw_buckets` 值可能对系统可用性产生影响,因此要根据实际情况进行调整。 **其他提示:** * `tcp_max_tw_buckets` 参数通常与中间代理服务器有关,在不使用中间代理服务器的情况下,可以忽略该参数。 * `tcp_max_tw_buckets` 参数可能对用户或服务产生影响,因此要权衡收益和成本。

正文

https://www.jianshu.com/p/b7e991be0909

 

因为前些天遇到大量 TIME_WAIT 导致端口耗尽服务异常的情况,让我注意到这个参数。
先说它的作用:在 TIME_WAIT 数量等于 tcp_max_tw_buckets 时,不会有新的 TIME_WAIT 产生。

tcp_max_tw_buckets 应该如何配置

如果不是类似 Nginx 之类的中间代理(即不担心端口耗尽),你通常不用关心这个值,使用官方默认的就好,甚至官方建议在内存大的情况下可以增加这个值。

类似 Nginx 之类的中间代理一定要关注这个值,因为它对你的系统起到一个保护的作用,一旦端口全部被占用,服务就异常了。 tcp_max_tw_buckets 能帮你降低这种情况的发生概率,争取补救时间。

这个值可能有什么不好的影响

在完全下面 2 条完全满足的情况下

  1. 当前服务器主动关闭连接
  2. 当前服务器 TIME_WAIT 数等于或大于 tcp_max_tw_buckets

可能会出现两种异常情况:
① 对端服务器发完最后一个 Fin 包,没有收到当前服务器返回最后一个 Ack,又重发了 Fin 包,因为新的 TimeWait 没有办法创建 ,这个连接在当前服务器上就消失了,对端服务器将会收到一个 Reset 包。因为这个连接是明确要关闭的,所以收到一个 Reset 也不会有什么大问题。(但是违反了 TCP/IP 协议)
② 因为这个连接在当前服务器上消失,那么刚刚释放的端口可能被立刻使用,如果这时对端服务器没有释放连接,当前服务器就会收到对端服务器发来的 Reset 包。如果当前服务器是代理服务器,就可能会给用户返回 502 错误。(这种异常对服务或者用户是有影响的)

建议

综合收益与成本,以下给出我的建议:
在只有 60000 多个端口可用的情况下,配置为

net.ipv4.tcp_max_tw_buckets = 55000

(在尽可能不违反 TCP/IP 协议的情况下保证系统的可用性)

参考文档

https://yq.aliyun.com/articles/2519?spm=a2c4e.11163080.searchblog.9.77852ec15TOj6z
官方文档: https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

与[转帖]net.ipv4.tcp_max_tw_buckets 配置说明相似的内容:

[转帖]net.ipv4.tcp_max_tw_buckets 配置说明

https://www.jianshu.com/p/b7e991be0909 因为前些天遇到大量 TIME_WAIT 导致端口耗尽服务异常的情况,让我注意到这个参数。先说它的作用:在 TIME_WAIT 数量等于 tcp_max_tw_buckets 时,不会有新的 TIME_WAIT 产生。 tc

[转帖]net.ipv4.tcp_max_syn_backlog & net.core.somaxconn

https://www.cnblogs.com/apink/p/15632882.html TCP SYN_REVD, ESTABELLISHED 状态对应的队列 TCP 建立连接时要经过 3 次握手,在客户端向服务器发起连接时,对于服务器而言,一个完整的连接建立过程,服务器会经历 2 种 TCP 

[转帖]linux中内核的一个不错的参数somaxconn

最近发现很多内核优化参数都记不住了,写下文章来备记,方便以后查看. 编辑 /etc/sysctl.conf 文件,在里面加入如下内容:(有注释) #设置系统对最大跟踪的TCP连接数的限制(CentOS 5.6无此参数) net.ipv4.ip_conntrack_max = 25000000 #最大

[转帖]tcp_tw_reuse、tcp_tw_recycle 使用场景及注意事项

linux TIME_WAIT 相关参数: net.ipv4.tcp_tw_reuse = 0 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭net.ipv4.tcp_tw_recycle = 0 表示开启TCP连接中TIME-WAIT socket

[转帖]内核参数优化

net.ipv4.tcp_timestamps= 1 #服务器时间截,默念为1 net.ipv4.tcp_tw_reuse= 1 #服务器作为客户端时起作用,开启后time_wait在一秒内回收,(两端都要开启tw_timestamps=1时才有效) net.ipv4.tcp_tw_recycle=

[转帖]Linux内核调优

Linux服务器调优 转载于:https://blog.csdn.net/largetalk/article/details/16863689 安装一台新的Linux服务器之后都要做些配置调整工作,优化一下系统,以前零零碎碎记录过一些,这里集中整理一下。 Linux内核参数 net.ipv4.tcp

[转帖]一个简单的内核参数优化

一个简单的内核参数优化 作者:孤风孤影 https://www.bilibili.com/read/cv15200947/ 出处:bilibili net.ipv4.tcp_keepalive_time=600 #此参数表示TCP发送keepalive探测消息的间隔时间(秒) net.ipv4.tc

[转帖]Linux内核参数net.ipv4.ip_local_port_range对服务器连接数影响的正确解释

首先明确一下该参数的意义:net.ipv4.ip_local_port_range表示本机作为客户端对外发起tcp/udp连接时所能使用的临时端口范围。 对于TCP连接,本机所能发起的tcp连接数受四元组(源地址*源端口*目标地址*目标端口)限制。 而对于UDP连接,本机所能发起的udp连接数则受二

[转帖]CONNTRACK_MAX和HASHSIZE

关于linux中的CONNTRACK_MAX和HASHSIZE要注意的地方 如果在压力测试的时候,并发数增大,但无法完成测试,可以尝试调整下参数: vi /etc/sysctl.conf 在kernel2.6之前的添加项: net.ipv4.netfilter.ip_conntrack_max =

[转帖]限制内核 udp bad checksum 失败告警信息

问题描述 某系统 dmesg 信息中有如下内容频繁打印,冲掉了其它相关的信息,需要限制打印。 UDP: bad checksum. From 10.66.245.93:61525 to 255.255.255.255:137 ulen 58 相关代码 内核源码树中的文件名: net/ipv4/udp