如何理解ifconfig中的errors/dropped/fifo/frame统计指标
对于ifconfig来说,它所获取一些错误统计信息如下所示:
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
首先这些指标获取是从/proc/net/dev:
cat /proc/net/dev
Inter-| Receive | Transmitface | bytes packets errs drop fifo frame compressed multicast| bytes packets errs drop fifo colls carrier compressed
docker0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
eth1: 4847481013 8371013 0 0 0 0 0 0 1375941032 6231188 0 0 0 0 0 0
lo: 1812 6 0 0 0 0 0 0 1812 6 0 0 0 0 0 0
主要通过这里去获取errs统计计数、drop统计计数、fifo统计计数和frame统计计数。
如何理解这里的RX errors和dropped,以及overruns和frame。首先需要明确的就是这里的统计信息均来自于内核驱动层,驱动实际上都是通过获取硬件中的状态来得到这些信息的,因此这里统计的值都是网卡上会出现的情况,驱动从网卡寄存器中读取到相应的计数信息,因此这些计数信息不涉及系统软件协议栈中的丢包和错误。
内核在打印这些内容时,是通过如下信息进行输出的:
net/core/net-procfs.c:
errors --------- stats->rx_errors
dropped --------- stats->rx_dropped + stats->rx_missed_errors
overruns(fifo) --------- stats->rx_fifo_errors
frame --------- stats->rx_length_errors + stats->rx_over_errors + stats->rx_crc_errors + stats->rx_frame_errors
上面的对应关系,其右侧的指标都是从网卡上获取的,那么对于具体的含义,每个网卡可能多少会存在一些差异,不过在设计上总的还是遵循如下原则的:
1.errors指的是网卡接收异常统计,这个值是从网卡上读取到的,并否内核计数,因此具体含义需要参考网卡的技术说明书,可以认为是接收到异常包,接收异常错误统计的总和。
2.overruns指的是fifo被填满了从而导致的丢包量,当内核申请内存给网卡使用,如果被填满后,内核还没有来得及读取和清空数据,那么就会触发overrun,从而把第一个包丢弃掉。
3.frame指的是帧格式错误计数,一般是帧不符合要求,比如长度未进行8字节对齐,2层帧中的crc校验错误等,很可能是网线或者网口异常引起。
4.rx_dropped统计了网卡丢包数同时也包括网卡dev层的内核丢包,比如内核发现网卡传递过来的包是不支持的协议类型,那么就会丢弃该包同时增加该计数。
最后来特别介绍一下dropped指标,从名字上来看是丢包了,这个丢包和大家口中常说的丢包其实是不同的,这里的dropped仅仅特指网卡对特定包执行了丢弃操作。而我们所说的应该叫系统丢包,它可能包含多种情况,本文介绍的erros/dropped/overruns/frame指标值,如果站在系统的角度都可以被叫做系统丢包了,当然除了网卡错误导致的丢包还应该包括协议栈里面的丢包等。
会产生rx_dropped统计值的情况包括如下几种:
1.Softnet backlog full ( /proc/net/softnet_stat)
2.Bad / Unintended VLAN tags
3.Unknown / Unregistered protocols
4.IPv6 frames when the Nic is not configured for IPv6
如何理解ifconfig中的errors/dropped/fifo/frame统计指标相关推荐
- ifconfig 下面的一些字段(errors, dropped, overruns)
一台机器经常收到丢包的报警,先看看最底层的有没有问题: # ethtool em2 | egrep 'Speed|Duplex' Speed: 1000Mb/s Du ...
- 深入理解MySQL8中死锁及线上故障解决
深入理解MySQL8中死锁及线上故障解决 一.什么是死锁 死锁是指两个或两个以上的事务在执行过程中,因争夺锁资源而造成的一种互相等待的现象. 若无外力作用,事务都将无法推进下去. 解决死锁问题最简单的 ...
- 彻底理解js中this
相关博文:http://blog.csdn.net/libin_1/article/details/49996815 彻底理解js中this的指向,不必硬背. 首先必须要说的是,this的指向在函数定 ...
- 理解oracle中连接和会话
理解oracle中连接和会话 1. 概念不同:概念不同: 连接是指物理的网络连接. 在已建立的连接上,建立客户端与oracle的会话,以后客户端与oracle的交互都在一个会话环境中进行. 2. ...
- 深入理解C++中public、protected及private用法
深入理解C++中public.protected及private用法 这篇文章主要介绍了C++中public.protected及private用法,对于C++面向对象程序设计来说是非常重要的概念,需 ...
- python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递
python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...
- python中元组_理解python中的元组
理解 python 中的元组 引言 在 Python 中元组是这样的: 元组是是这样一种数据结构:不变的或者不可改变的(简单来说不能重新赋值) .元素的有序序列.因为元组是 不变的,所以他的数值是不能 ...
- 深入理解Java中的内存泄漏
理解Java中的内存泄漏,我们首先要清楚Java中的内存区域分配问题和内存回收的问题本文将分为三大部分介绍这些内容. Java中的内存分配 Java中的内存区域主要分为线程共享的和线程私有的两大区域: ...
- [转]深入理解CSS中的层叠上下文和层叠顺序
http://www.zhangxinxu.com/wordpress/2016/01/understand-css-stacking-context-order-z-index/ 零.世间的道理都是 ...
最新文章
- import excel to mysql_将 Microsoft Excel 导入至 MySQL
- leetcode算法题--最小的k个数
- 直播 | AAAI 2021:如何缓解GNN预训练和微调之间的优化误差?
- [转]Muilti-touch 双指缩放的实现探索
- redhat java 多个版本_Linux下安装JDK(多个版本) 切换
- 第十一周总结--助教
- 6个好用的Web开发工具
- wordpress函数wp_http_validate_url畸形IP绕过验证SSRF漏洞
- Sharepoint学习笔记---Debug--使用ULS Log跟踪Solution错误信息
- Alluxio在多级分布式缓存系统中的应用
- 续《用最简单的例子实现jQuery图片即时上传》之多图上传实现
- x86-64 下函数调用及栈帧原理
- 装上这 10个vscode插件,python才真的是无敌的存在!
- 直播app开发中视频编码标准发展史
- 怎样搜索计算机中docx格式的文件,如何打开docx文件 打开docx文件方法
- html仿ppt动画,jquery仿PPT幻灯片特效插件ppt.js
- 【马仔创业感悟】公司售前和售后维护制度思考
- YTU 2577: 小数计算——结构体
- vue动态修改网页标题(也可用于vx里的网页标题)
- 【Python 数据科学】分组group by基础
热门文章
- 自习室风口!使用网上预约系统助力自习室预约
- Windows 7核心图形架构细致分析
- HTML中引入CSS文件的几种方法
- malloc,calloc和realloc。
- 俏江南“倒闭”真相:对员工好坏,直接决定了企业的生死!
- c语言交通违章编程代码,C语言程序设计之交通处罚单管理系统报告(内含代码)...
- lintcode backpack
- Jquery实现 RadioButton做必选校验
- 2D转3D技术的优势
- nginx: [error] invalid PID number ““ in “/app/nginx-1.16.0/logs/nginx.pid“