做微网站的第三方登录,数据分析系统,网站建设模板怎么设计,佛山营销型网站定制过多的TIME_WAIT 线上问题紧急处理方式tcp_tw_reuse启用主要特点#xff1a;源码 线上问题
线上机器出现了几万个TIME_WAIT#xff0c;怎么办#xff1f;
紧急处理方式
tcp_tw_reuse
启用
默认情况下tcp_tw_reuse是关闭状态#xff0c;使用sysctl -w net.ipv4.tcp_tw_… 过多的TIME_WAIT 线上问题紧急处理方式tcp_tw_reuse启用主要特点源码 线上问题
线上机器出现了几万个TIME_WAIT怎么办
紧急处理方式
tcp_tw_reuse
启用
默认情况下tcp_tw_reuse是关闭状态使用sysctl -w net.ipv4.tcp_tw_reuse1命令启用。
[baichaolocalhost ~]$ cat /proc/sys/net/ipv4/tcp_tw_reuse
0
[baichaolocalhost ~]$ sudo sysctl -w net.ipv4.tcp_tw_reuse1
[sudo] password for baichao:
net.ipv4.tcp_tw_reuse 1
[baichaolocalhost ~]$ cat /proc/sys/net/ipv4/tcp_tw_reuse
1
tcp_tw_reuse 允许重用处于 TIME_WAIT 状态的连接而不必等待其 TIME_WAIT 持续时间通常是 2 MSL结束。
主要特点
功能当启用该选项时Linux 内核允许新的 TCP 连接重用那些处于 TIME_WAIT 状态的连接即相同的四元组源 IP、源端口、目标 IP 和目标端口。 这种重用仅适用于客户端发起的连接例如短时间内同一个客户端需要和同一服务器建立多个连接。实现通过允许重用 TIME_WAIT 中的端口减少 TIME_WAIT 状态下的资源占用特别是端口号的消耗。风险因为 TIME_WAIT 状态的存在是为了确保旧数据包不会影响新连接如果网络中的旧报文仍然存在可能会导致新连接接收到这些旧报文进而产生数据混乱。适用场景在客户端场景下频繁发起与同一服务器的连接时可以开启该选项如高频的短连接请求应用。这在客户端或网关类设备中较为常用。
源码
{/** 这段代码是 Linux 内核中用来注册一个 sysctl 配置项的代码片段。* 它的作用是通过 /proc/sys/net/ipv4/tcp_tw_reuse 这个路径允许用户读取和修改 tcp_tw_reuse 配置参数。* tcp_tw_reuse 允许重用处于 TIME_WAIT 状态的连接而不必等待其 TIME_WAIT 持续时间通常是 2 MSL结束。*/.procname tcp_tw_reuse,/** 这是指向实际存储 tcp_tw_reuse 值的内存地址的指针。init_net.ipv4.sysctl_tcp_tw_reuse 指向的是全局变量 sysctl_tcp_tw_reuse它保存了当前的 tcp_tw_reuse 配置值。* init_net 是 Linux 内核网络命名空间的结构体ipv4 是其中的 IPv4 相关设置而 sysctl_tcp_tw_reuse 是 tcp_tw_reuse 的具体存储变量。*/.data init_net.ipv4.sysctl_tcp_tw_reuse,/** 这定义了 tcp_tw_reuse 变量的大小。在这里tcp_tw_reuse 是一个整型变量因此 maxlen 被设置为 sizeof(int)即 4 字节。* 这确保读写操作时处理的是整数值防止用户写入错误长度的数据。*/.maxlen sizeof(int),/** 这是该 sysctl 文件的权限设置。0644 代表该文件的读写权限* 文件拥有者可以读和写rw-。* 文件所属组和其他用户只能读取r--。* 这意味着普通用户可以读取这个配置项的值但只有 root 用户可以修改它。*/.mode 0644,/** proc_dointvec_minmax 是一个处理函数它定义了如何读取和写入这个 sysctl 变量。* proc_dointvec_minmax 具体负责对该变量进行范围检查即它不能超过指定的最小值或最大值并确保数据的合法性。*/.proc_handler proc_dointvec_minmax,/** extra1 定义了 tcp_tw_reuse 的最小值。SYSCTL_ZERO 是一个指向全局常量 0 的指针意味着 tcp_tw_reuse 的最小值为 0。* tcp_tw_reuse 是一个布尔值或整型配置0 通常表示关闭。*/.extra1 SYSCTL_ZERO,/** extra2 定义了 tcp_tw_reuse 的最大值。这里设置为 two表示最大值为 2。* 根据这段代码的逻辑tcp_tw_reuse 的取值范围是 0 到 2而不是传统的 0 或 1。这个设置可能是为了未来扩展或特定版本的功能增加。*/.extra2 two,}