网络栈调优98 条

监听队列溢出诊断

客户端报连接超时、服务日志出现握手失败时,用溢出计数与 ss 队列读数区分 SYN 队列满还是 accept 队列满,再决定调参数或改应用。

看溢出计数

看溢出计数
netstat -s | grep -iE 'overflow|listen' -A1
# 关注: listen queue of a socket overflowed 与 SYN cookies sent

看当前队列

看当前队列
ss -lnt
# Recv-Q 逼近 Send-Q: accept 队列将满; Send-Q 即应用 backlog, 受 somaxconn 约束
计数是累计值, 采样前后差值才有意义; 溢出多为应用 accept/处理慢导致, 调大队列只能争取缓冲。

易错点

  • 只看一次累计计数就下结论, 忽略增长速率
  • 把队列调大当作根因修复, 未排查应用处理耗时

数据来源与参考

  • man ss
  • Linux Documentation/networking/ip-sysctl.txt
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌