首页/网络/抓包与流量分析速查/内核丢包原因逐项核对
丢包与时延定位60 条

内核丢包原因逐项核对

netstat -s 的分段含义不同:receive buffer errors(缓冲不足)、prune(socket 队列裁剪)、out of memory、TCP aborted on timeout 各有处置方向。

内核计数怎么看丢包

主机侧丢包不是单一事件,内核把它分门别类记在不同的计数器里:接收缓冲不足、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接收缓冲不足导致的丢弃调大接收缓冲或让应用更快读取
prunesocket 接收队列被裁剪应用读取过慢,优先优化应用侧
out of memory内核内存不足评估整体内存压力与连接规模
aborted on timeout连接因超时被中止检查重传、对端可达性与保活配置
接收队列溢出与 socket 队列裁剪是两类不同瓶颈:前者小到网卡与内核队列,后者一直延伸到应用读取速度,只调一侧参数通常无效。
容器里读到的计数可能是宿主视图,也可能是命名空间视图,报故障前先确认自己在哪个上下文观察,避免把同宿主的其他业务计入本服务。

易错点

  • 对上电以来的累计计数下结论:不看差值就会对着历史数据报警,采样窗口必须与业务时段对齐
  • 只调内核缓冲不看应用读取:socket 队列裁剪的根因在应用,调大缓冲只是把问题推后
  • 容器内直接采信宿主视图:不同命名空间下的计数含义不同,容易张冠李戴
  • 把平稳期的偶发增长当故障:需要结合流量峰值与业务报错时间点一起判断

数据来源与参考

  • Linux 内核网络统计文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌