nstat 是什么
nstat 把内核网络计数器按增量方式展示,数据来源是 /proc/net/snmp 与 /proc/net/netstat。默认输出的是「距上次运行以来的增量」,重传、UDP 错误、连接失败原因都能看到,做网络体检与故障归因时比直接读 procfs 舒服得多。
基本信息
| 所属 | iproute2 软件包 |
|---|---|
| 语法 | nstat / nstat -az |
| 记忆点 | 默认是增量,-a 绝对值,-z 包含零值项 |
| 数据来源 | /proc/net/snmp 与 /proc/net/netstat |
典型使用场景
- 网络体检:看重传、超时、连接失败是否异常增长
- 抖动后归因:区分重传、乱序与丢包方向
- 窗口对比:间隔采集两次做差,定位故障时段
- 排查 UDP 应用丢包:看接收错误与端口不可达
- 变更前后对比计数器,评估网络质量变化
- 与 ss、sar 交叉验证同一时段的网络问题
常用示例
常用示例
nstat # 显示距上次运行的增量
nstat -az | head -30 # 绝对值并包含零值项
nstat -az | grep -E 'TcpRetransSegs|TcpOutSegs|TcpAttemptFails' # 关键项
nstat -az > /tmp/n1; sleep 300; nstat -az > /tmp/n2; diff /tmp/n1 /tmp/n2 | head -20
nstat -r 5 # 每 5 秒刷新一次(版本相关)
grep -E 'TcpRetransSegs|TcpOutSegs' /proc/net/netstat | head # 直接读源数据
sar -n ETCP 1 5 # 另一个视角的重传统计关键计数器读法
| 计数器 | 含义 | 异常表现 |
|---|---|---|
| TcpRetransSegs | 重传段数 | 增长快说明丢包或链路质量差 |
| TcpOutSegs | 发送段总数 | 计算重传率时的分母 |
| TcpAttemptFails | 连接尝试失败次数 | 对端拒绝或网络不可达 |
| TcpExtListenDrops | 监听队列溢出丢弃 | 连接突增或 backlog 过小 |
| UdpInErrors | UDP 接收错误数 | 排查应用丢包的起点 |
重传率大约等于 TcpRetransSegs 增量除以 TcpOutSegs 增量。持续超过百分之一就值得顺着丢包方向去查,单看一个数字没有意义。
增量是相对「上次运行」计算的:两次对比必须用同一身份执行,因为 root 与普通用户各自保存历史,用不同身份跑出来的增量不可比。
计数器随内核启动累计、重启后归零。做长期基线要定期采集并保存历史,别把单次数值当成绝对值来解读。
容器内看到的计数器属于独立的网络命名空间,与宿主机视角不同:同一台机器上排查容器网络问题,要在对应命名空间内执行 nstat,否则数字对不上。