发送侧排队上限
net.ipv4.tcp_limit_output_bytes 限制单个 TCP 套接字在内核发送路径(qdisc 与驱动队列)上可排队等待的字节数。它的作用是抑制本地缓冲膨胀:若允许某个连接堆太多数据在本地队列,RTT 之外还会叠加本地排队时延,表现为延迟抖动。配合驱动的字节队列限制机制,这个参数把排队控制在合理范围,属于吞吐与本地排队延迟之间的权衡。默认值随内核版本变化,应先查询本机现值。
基本信息
| 参数名 | net.ipv4.tcp_limit_output_bytes |
|---|---|
| 作用 | 单个套接字在发送侧可排队的字节上限 |
| 相关机制 | BQL(驱动侧字节队列限制) |
| 默认值 | 随内核版本演进,本机现值以 sysctl 为准 |
| 方向 | 调大提升突发吞吐,调小降低本地排队延迟 |
典型使用场景
- 延迟敏感服务出现难以解释的长尾延迟
- 大带宽高 RTT 链路上吞吐压不满
- 排查本地排队导致的延迟抖动
- 与拥塞算法、qdisc 一起评估端到端行为
- 统一容器与宿主网络基线时核对取值
查看与变更
查看与变更
sysctl net.ipv4.tcp_limit_output_bytes
sysctl -w net.ipv4.tcp_limit_output_bytes=262144
ss -tin state established | head -20 # 看连接的 cwnd、rtt 与重传
ip -s link show dev ens5 | head -20 # 网卡队列与丢包统计
tc -s qdisc show dev ens5 # 查看 qdisc 排队情况
nstat -az | grep -iE 'Retrans|TCPLost' | head方向与代价
| 方向 | 收益 | 代价 |
|---|---|---|
| 调大 | 发送侧可排队更多,短时突发吞吐更好 | 本地排队时延上升,长尾延迟可能变差 |
| 调小 | 本地排队更少,延迟更可控 | 高带宽链路可能压不满带宽 |
| 保持默认 | 内核按版本与场景整定的折中 | 极端场景下不是最优 |
默认值随内核版本演进差异明显,调整前先查本机现值,横向比较要在相同内核版本的机器之间进行。
把它当吞吐开关盲目调大,会掩盖本应排查的应用发送模型问题(例如单连接逐条等待响应),同时放大本地排队延迟。