首页/网络/网络排障速查/netstat -s 协议栈统计判读

netstat -s 协议栈统计判读

判断是不是在丢包的内核级证据:netstat -s 与 nstat -az 提供重传、SYN 丢弃、listen 队列溢出、TIME-WAIT 回收等累计计数。

网络排障速查网络更新于 2026-10-13

netstat -s 协议栈统计是什么

判断『是不是真的在丢包』需要内核级证据:netstat -s 与 nstat -az 提供重传、SYN 丢弃、accept 队列溢出、TIME-WAIT 回收等累计计数。这些数字是自开机以来的总量,单次读数只能说明历史,必须两次采样求差才能反映现状。它是把『感觉慢』变成『重传率多少』的关键一步,也是应用侧与网络侧互相推责时最客观的裁判。

基本信息

适用平台Linux(net-tools 的 netstat,或 iproute2 的 nstat)
数据来源内核 SNMP 与 TCP 扩展计数器
使用要点必须两次采样求差,单次读数为历史累计
常用过滤retrans、drop、listen、overflow、prune

典型使用场景

  • 连接建立失败排查:看 SYN 相关丢弃计数是否增长
  • 应用响应慢:确认是否伴随 TCP 重传上升
  • 高并发服务:检查 accept 队列溢出,判断是否应用 accept 不及时
  • 内存压力判断:观察接收队列裁剪与丢弃计数
  • 容量规划:留存基线数据,对比不同时期的协议栈健康度

统计与差分采样

统计与差分采样
# 一次性看全量统计
netstat -s | head -50
# 只看关键计数项
nstat -az | grep -iE 'retrans|drop|listen|overflow|prune'
# 差分采样:先记录一份,等 60 秒再记录一份
nstat -n > /tmp/n1
sleep 60
nstat -n > /tmp/n2
diff /tmp/n1 /tmp/n2 | head -40

重点计数判读

计数项含义异常指向
TcpRetransSegs重传报文总数与总发送量对比算重传率
ListenOverflows 与 ListenDropsaccept 队列溢出应用 accept 不及时,非网络设备问题
TCPAbortOnTimeout重传超时放弃连接次数连接被内核放弃,应用侧报超时
TcpExtPruneCalled内存压力下裁剪接收队列接收缓冲不足或应用读取慢
TCPTimeWaitRecycledTIME-WAIT 快速复用计数大量复用可能带来连接异常风险
这些数字是自开机以来的累计量:把累计值当当前指标会越看越慌。正确做法是固定间隔采两次样求差,再与同期流量或请求数做比值。
看到 ListenOverflows 增长不要先去查网络设备:它明确指向应用 accept 不及时,处置方向在应用与 backlog 配置上,盲目扩大队列可能只是推迟问题。

重传增量与粗估

重传增量与粗估
# 第一次采样
nstat -n | grep -i retrans
sleep 60
# 第二次采样,两次相减即为这一分钟的重传增量
nstat -n | grep -i retrans
# 配合连接概览判断量级
ss -s | head -3
重传率没有通用阈值:跨地域公网业务与同机房内网业务的健康基线差异很大。可靠做法是先记录本业务在平稳期的常态区间,再用同一口径对比异常时段。

易错点

  • 把开机以来的累计值当当前故障指标:判断严重程度完全失真
  • 忽略 ListenOverflows:把应用 accept 不及时误判成网络设备丢包
  • 不做差分采样:无法判断问题『现在是否还在发生』
  • 只看重传不看重传率:不知道请求量时无法评估影响程度
  • 把 nstat 与 netstat -s 的字段名硬套:两者命名不同但语义对应,需按含义理解

数据来源与参考

  • Linux 内核文档:SNMP 计数器
  • man 8 nstat(iproute2)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌