首页/系统/Linux 内核与性能调优速查/net.ipv4.tcp_abort_on_overflow 队列溢出行为
sysctl 内核参数72 条

net.ipv4.tcp_abort_on_overflow 队列溢出行为

accept 全连接队列溢出时的两种处理:默认丢弃握手(等对端重传),或回 RST 让对端立即失败。

队列溢出行为是什么

net.ipv4.tcp_abort_on_overflow 决定全连接队列溢出时的处理方式:默认值 0 表示静默丢弃握手报文,让客户端因为收不到响应而按超时重传,最终可能失败;置为 1 则直接回 RST,客户端立刻收到连接重置。前者把问题表现为随机延迟,后者把问题表现为明确失败。它不解决溢出本身,只是改变溢出对外呈现的方式,常用于让容量问题更快被发现。

基本信息

参数net.ipv4.tcp_abort_on_overflow
取值0 丢弃并等待重传(默认) / 1 回 RST 让对端立即失败
作用对象已完成握手等待 accept 的全连接队列
配套参数net.core.somaxconn 与应用 listen backlog 决定队列长度
溢出计数TcpExt 中的 ListenOverflows 与 ListenDrops
适用场景希望容量问题尽早暴露的测试或灰度环境

典型使用场景

  • 压测暴露容量问题:让溢出立即表现为失败,而不是被重传掩盖
  • 灰度验证:确认新版本 accept 处理能力是否足够
  • 排查随机建连超时:先确认队列溢出计数是否在增长
  • 容量规划:用溢出次数评估需要提升的 accept 速率
  • 生产取舍:在用户体验与问题可见性之间做权衡

查看与调整

查看与调整
sysctl net.ipv4.tcp_abort_on_overflow          # 读当前行为
sysctl net.core.somaxconn                       # 队列上限
ss -lnt | head                                  # Listen 行 Send-Q 即应用申请值
nstat -az TcpExtListenOverflows TcpExtListenDrops   # 溢出与丢弃计数
sysctl -w net.ipv4.tcp_abort_on_overflow=1      # 溢出时回 RST

取值影响对照

取值对端看到的现象适用与代价
0(默认)建连延迟上升,部分请求超时失败体验相对平滑,但问题被掩盖
1立即收到连接重置,请求快速失败问题暴露快,短连接高峰的用户体验变差
配合重试机制客户端自动重试到其他实例负载均衡加客户端重试时可缓解
配合容量提升溢出计数下降根治方向仍是提高处理能力与队列长度
把它设为 1 后,溢出连接会被直接重置,客户端表现为连接被重置错误。它对排查有帮助,但会影响短连接高峰期的用户体验,生产环境启用前应结合客户端重试与负载均衡策略评估。
调整前先确认溢出计数确实在增长:偶发的丢弃可能只是应用接受连接时的短暂抖动,把参数改掉既没有收益又增加了排查难度。

易错点

  • 把它当作溢出问题的解决方案:真正的手段是提高接受速率与合理设置队列长度
  • 不看计数直接改参数:无法确认溢出是否真实发生,改动缺乏依据
  • 生产环境直接开启:短连接高峰时用户会看到连接被重置,需评估客户端重试策略
  • 忽略应用处理能力:accept 循环慢、单线程阻塞都是根因,参数改动无法掩盖
  • 改完不回读也不观测:溢出计数与业务失败率需要一并对比

数据来源与参考

  • Linux 内核 Documentation/networking/ip-sysctl.rst
  • man 7 tcp
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌