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 与 ListenDrops | accept 队列溢出 | 应用 accept 不及时,非网络设备问题 |
| TCPAbortOnTimeout | 重传超时放弃连接次数 | 连接被内核放弃,应用侧报超时 |
| TcpExtPruneCalled | 内存压力下裁剪接收队列 | 接收缓冲不足或应用读取慢 |
| TCPTimeWaitRecycled | TIME-WAIT 快速复用计数 | 大量复用可能带来连接异常风险 |
这些数字是自开机以来的累计量:把累计值当当前指标会越看越慌。正确做法是固定间隔采两次样求差,再与同期流量或请求数做比值。
看到 ListenOverflows 增长不要先去查网络设备:它明确指向应用 accept 不及时,处置方向在应用与 backlog 配置上,盲目扩大队列可能只是推迟问题。
重传增量与粗估
重传增量与粗估
# 第一次采样
nstat -n | grep -i retrans
sleep 60
# 第二次采样,两次相减即为这一分钟的重传增量
nstat -n | grep -i retrans
# 配合连接概览判断量级
ss -s | head -3重传率没有通用阈值:跨地域公网业务与同机房内网业务的健康基线差异很大。可靠做法是先记录本业务在平稳期的常态区间,再用同一口径对比异常时段。