查看统计信息:
netstat -s
ethtool -S eth0
cat /proc/net/dev
cat /sys/class/net/eth0/statistics/*
cat /proc/net/softnet_stat # 查看软件中断(softirq)处理的统计信息
下面摘抄来自网上的 ifconfig 部分字段解释说明:
- RX errors: 表示总的收包的错误数量,这包括 too-long-frames 错误,Ring Buffer 溢出错误,crc 校验错误,帧同步错误,fifo overruns 以及 missed pkg 等等。
- RX dropped: 表示数据包已经进入了 Ring Buffer,但是由于内存不够,上层协议不支持等系统原因,导致在拷贝到内存的过程中被丢弃,netstat -s可以看到更详细的原因。
- RX overruns: 表示了 fifo 的 overruns,这是由于 Ring Buffer(aka Driver Queue) 传输的 IO 大于 kernel 能够处理的 IO 导致的,而 Ring Buffer 则是指在发起 IRQ 请求之前的那块 buffer。很明显,overruns 的增大意味着数据包没到 Ring Buffer 就被网卡物理层给丢弃了,而 CPU 无法即使的处理中断是造成 Ring Buffer 满的原因之一。
- RX frame: 表示 misaligned 的 frames。
- 对于 TX 的来说,出现上述 counter 增大的原因主要包括 aborted transmission, errors due to carrirer, fifo error, heartbeat erros 以及 windown error,而 collisions 则表示由于 CSMA/CD 造成的传输中断。
关于rx_dropped
从内核2.6.37版本开始,丢弃数据包计数的含义已经发生了变化。在之前,数据包被丢弃最可能是因为出现了错误。现在,rx_dropped
计数器显示了由于以下原因而被丢弃的数据帧的统计信息:
- Softnet backlog full — (Measured from /proc/net/softnet_stat)
- Bad / Unintended VLAN tags
- Unknown / Unregistered protocols
- IPv6 frames when the server is not configured for IPv6
解释过来就是:
1、数据包的处理速度跟不上数据包接收的速度,导致系统内部的接收队列(也称为软中断队列)被填满。
2、数据包带有错误的VLAN标签,或者系统没有预期接收该VLAN标签的数据包。
3、数据包可能包含了一个系统不认识或未配置的协议类型,或者系统不知道如何处理这种协议的数据包。
4、如果服务器没有启用或配置IPv6支持,但收到了IPv6的数据包,那么这些数据包将无法被正确解析或处理。
如果任何数据帧满足上述条件之一,它们将在协议栈之前被丢弃,并且rx_dropped
计数器的值会增加。