首页/数据/Redis 进阶速查/内核网络缓冲区与大数据流量
性能与排障129 条

内核网络缓冲区与大数据流量

大响应或大吞吐场景,内核 rmem/wmem 上限可能成为约束;按实测证据调整 net.core.rmem_max 等参数,别默认全调大。

Redis 进阶速查数据更新于 2026-10-13

内核缓冲与吞吐上限

大响应或高吞吐场景下,内核 socket 缓冲区上限可能成为约束:单个大 value 或批量响应受 rmem/wmem 上限限制,超出部分只能分批发送,表现为吞吐上不去而 CPU 并不高。调整方式是按实测证据修改 net.core.rmem_max、net.core.wmem_max 与 tcp_rmem、tcp_wmem,先用观测确认它真的是瓶颈,再看调整前后的变化。

基本信息

相关参数net.core.rmem_max、net.core.wmem_max、net.ipv4.tcp_rmem、net.ipv4.tcp_wmem
查看方式sysctl <参数名>,或 sysctl -a 配合过滤
典型信号吞吐受限、重传与丢包、应用层写阻塞
调整原则以压测与观测证据为依据,不整套照搬经验值
留档要求变更前后的参数值与指标一起记录

典型使用场景

  • 大 value 读取:单键体积大时接收窗口直接影响单连接吞吐
  • 批量响应:MGET 等大批量返回的数据量受缓冲影响
  • 跨机房传输:链路 RTT 大时窗口不足会限制吞吐上限
  • 压测调优:按压测结果逐项验证,而非无差别调大
  • 问题定位:先确认瓶颈在内核网络栈还是服务端处理

查看与实际使用

查看与实际使用
sysctl net.core.rmem_max        # 单 socket 接收缓冲上限
sysctl net.core.wmem_max        # 单 socket 发送缓冲上限
sysctl net.ipv4.tcp_rmem        # TCP 接收缓冲的 min/default/max 三档
sysctl net.ipv4.tcp_wmem        # TCP 发送缓冲的 min/default/max 三档
ss -tinm | head -20             # 看实际连接的窗口与缓冲占用
sysctl -w net.core.rmem_max=16777216   # 临时生效便于验证,通过后再持久化

参数作用对照

参数作用范围调整线索
net.core.rmem_max所有协议的单 socket 接收上限本地读取大响应受限时看它
net.core.wmem_max所有协议的单 socket 发送上限本机作为服务端发送大响应时看它
net.ipv4.tcp_rmemTCP 接收缓冲三档取值结合带宽时延积评估窗口是否足够
net.ipv4.tcp_wmemTCP 发送缓冲三档取值跨区链路 RTT 大时更值得关注
网络参数与业务形态强相关:大 value 与大 RTT 是两个不同的约束维度,通用经验值只能当起点,最终取值要由自己的压测数据决定。
不加验证整套调大,会让内存占用与运维复杂度一起上升,还很难判断收益来自哪一项;每次只改一个参数并记录变更前后的指标。

易错点

  • 不加验证全套调大:内存占用上升、运维面变复杂,收益来源无法归因
  • 调完不留档:后续排查没有基线,改了什么、为什么改都说不清
  • 把缓冲区当万能解:真正瓶颈可能在服务端处理或应用层序列化
  • 只改运行时值不持久化:重启后参数回到默认,问题在下次重启后原样重现

数据来源与参考

  • Redis 官方实践:网络调优
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌