/proc/net/snmp 是什么
这是协议栈各层累计计数的原始来源,每个协议段由两行组成:第一行是列名,第二行是对应的数值,两行的列序严格对应。nstat 与 netstat -s 都在它之上做二次加工,需要原始累计值或自建采集时可以直接读这个文件。
基本信息
| 包含协议段 | Ip、Icmp、Tcp、Udp 等,按段解析 |
|---|---|
| 读取方式 | 成对提取表头行与紧跟的数值行 |
| Tcp 段常用列 | RetransSegs、InErrs、InCsumErrors、OutRsts、CurrEstab |
| 计数语义 | 自开机以来的累计值,重启后归零 |
| 更易读的替代 | nstat 会补上名称并按差值展示 |
典型使用场景
- 自建监控采集:直接取累计值再自行计算速率
- 核对 nstat 与 netstat -s 的口径,确认两者的数据来源一致
- 怀疑校验和错误或 RST 异常增多时,查看对应计数器
- 对比重启前后的累计值变化,判断异常是否持续存在
- 在没有 sysstat 与 nstat 的精简系统上做协议栈观测
读取方法
读取方法
awk '/^Tcp:/{print; getline; print}' /proc/net/snmp # 表头与数值成对输出
awk '/^Udp:/{print; getline; print}' /proc/net/snmp # 换段名即换统计对象
nstat -az | grep -iE 'RetransSegs|InErrs|OutRsts' # 带名称与差值的对照口径
stat -c %Y /proc/uptime && uptime # 先确认运行时长再解读累计值Tcp 段常见列
| 列名 | 含义 | 异常提示 |
|---|---|---|
| RetransSegs | 重传的报文段总数 | 需与发送总量比较占比 |
| InErrs | 接收到的错误报文数 | 持续增长说明链路或对端异常 |
| InCsumErrors | 校验和错误的报文数 | 增长通常指向链路质量或网卡卸载问题 |
| OutRsts | 发出的 RST 报文数 | 异常增多可能是连接被频繁拒绝 |
| CurrEstab | 当前处于建立状态的连接数 | 用于判断连接规模与容量水位 |
列名与数值必须按位置一一对位,直接按固定列号取值会在内核版本变化时读错列;稳妥做法是先打印表头确认列序,再按名称定位。
累计值在重启后归零,跨重启直接比较毫无意义。做趋势分析前先确认系统运行时长,或者改用 nstat 的差值口径。