专栏文章 TCP 参数优化笔记

飞天小子的性能课堂 · 2020年04月04日 · 最后由 飞天小子的性能课堂 回复于 2020年04月05日 · 5150 次阅读

linux 下 tcp 参数优化

vim /etc/sysctl.conf

# 未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_max_syn_backlog=5000

#timewait 数量
net.ipv4.tcp_max_tw_buckets = 6000

# 改进 tcp 的拥塞控制机制
net.ipv4.tcp_sack =1

#tcp 窗口大于 64K,必须开启此值
net.ipv4.tcp_window_scaling = 1

# 增加 tcp 最大缓冲区
net.ipv4.tcp_mem = 4096 67380 4194304
net.ipv4.tcp_rmem = 4096 67380 4194304
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_fin_timeout = 30

# 内核放弃建立连接之前发送 synack/syn 包的数量
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_reuse = 0

# 设置文件最大句柄数
fs.file-max = 102400

# 修改消息队列长度
kernel.msgmnb = 65536
kernel.msgmax = 65536

# 设置最大内存共享段大小 bytes
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.wmem_max = 16777216
net.core.rmem_max = 16777216

# 设置同时发起的 tcp 连接数
net.core.somaxconn = 65535

windows 下的 tcp 参数调整

TCPWindowSize
在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters 子键下创建名为 TCPWindowSize 的 REG_DWORD 值,该值的范围是从 0 到 65535,将该值设置为 62420。
缺省情况下,TCP 将试图根据 MSS 来优化窗口大小,起始值为 16KB,最大值为 64KB。TCPWindowSize 的最大值通常为 65535 字节(64KB),以太网最大段长度为 1460 字节,低于 64KB 的 1460 的最大整数倍为 62420 字节,因而可以在注册表中将 TCPWindowSize 设置为 62420,作为高带宽网络中适用的性能优化值

TCP1323Opts
浏览至 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters 注册表子键。在 Parameters 子键下创建或修改名为 TCP1323Opts 的 REG_DWORD 值
该值的含义为:
0(缺省值)表示禁用 TCP Window Scaling 和时间戳;
1 表示只启用 TCP Window Scaling;
2 表示只启用时间戳;
3 表示同时启用 TCP Window Scaling 和时间戳。
TCP1323Opts 设置为激活 TCP Window Scaling 后,可以将上文中的注册表项 TCPWindowSize 的值增大,最大能达到 1GB,为了达到最佳性能,这里的值最好设置成 MSS 的倍数,推荐值为 256960 字节

TcpTimedWaitDelay
TcpTimedWaitDelay 的值表示系统释放已关闭的 TCP 连接并复用其资源之前,必须等待的时间。这如果系统显示大量连接处于 TIME_WAIT 状态,会导致并发量与吞吐量的严重下降,通过减小该项的值,系统可以更快地释放已关闭的连接,从而为新连接提供更多的资源
在 Parameters 子键下创建或修改名为 TcpTimedWaitDelay 的 REG_DWORD 值,该值的范围是从 0 到 300,建议将该值设置为 30

MaxUserPort
该项的缺省值是十进制的 5000,这也是系统允许的最小值。Windows 默认为端口保留的端口号范围是从 1024 到 5000。为了获得更高的并发量,建议将该值至少设为 32768 以上,甚至设为理论最大值 65534
在 Parameters 子键下创建或修改名为 MaxUserPort 的 REG_DWORD 值,该值的范围是从 5000 到 65534,缺省值为 5000,建议将该值设置为 65534

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞

想了解下,这里提到了很多 “建议将该值设为 xx” ,这里的建议是基于什么场景下给出的?

我理解参数调优,没有最好,只有最合适的吧。调大了占资源,调小了容易达到瓶颈。没有具体上下文场景的参数调优,真的比默认值好吗?

另外,能否给个各参数优化前后的性能对比数据?要不只知道要这么做,不知道为啥和做不做的效果区别,感觉有点只是抄答案,记忆不够深刻。

陈恒捷 回复

关于 tcp 的我还没理解透呢,这里只是记个笔记~可以互相讨论一下

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册