内核计数怎么看丢包
主机侧丢包不是单一事件,内核把它分门别类记在不同的计数器里:接收缓冲不足、socket 队列被裁剪、内存不足、超时中止连接各有独立计数,处置方向也不同。netstat -s 与 nstat 输出的每一段都对应一条处理路径,读法比读法更重要——先分清是「包到不了应用」还是「应用读得太慢」,再决定调缓冲、调应用还是调队列。
基本信息
| 适用平台 | Linux(netstat 来自 net-tools,nstat 来自 iproute2) |
|---|---|
| 命令 | netstat -s、nstat -az、ss -s |
| 关键词汇 | receive buffer errors、prune、out of memory、aborted on timeout |
| 观察方式 | 取两次采样差值,与业务窗口对齐 |
典型使用场景
- 应用侧报「偶发读不到数据」而网络侧看不出丢包
- 高并发短连接服务出现连接异常中止,需要区分是超时还是资源不足
- 压测过程中定位瓶颈在网卡、内核还是应用读取
- 容器环境里判断计数属于宿主还是命名空间视角
- 长期运行的主机上做容量趋势观察
- 为内核参数调整提供依据,避免盲调缓冲区
常见计数段
常见计数段
netstat -s | grep -A2 -Ei 'buffer|prune|abort|listen' # 分类概览
nstat -az | grep -Ei 'drop|overflow|prune' # 更细的增量视图
grep '' /proc/net/softnet_stat # 第 2 列是软中断丢弃计数
# 两次采样取差值,落在业务峰值窗口内的增长才值得追查计数段逐项读法
| 计数段 | 含义 | 处置方向 |
|---|---|---|
| receive buffer errors | 接收缓冲不足导致的丢弃 | 调大接收缓冲或让应用更快读取 |
| prune | socket 接收队列被裁剪 | 应用读取过慢,优先优化应用侧 |
| out of memory | 内核内存不足 | 评估整体内存压力与连接规模 |
| aborted on timeout | 连接因超时被中止 | 检查重传、对端可达性与保活配置 |
接收队列溢出与 socket 队列裁剪是两类不同瓶颈:前者小到网卡与内核队列,后者一直延伸到应用读取速度,只调一侧参数通常无效。
容器里读到的计数可能是宿主视图,也可能是命名空间视图,报故障前先确认自己在哪个上下文观察,避免把同宿主的其他业务计入本服务。