要查历史网卡丢包率,必须用 sar -n EDEV 读取 sysstat 归档的二进制日志(如 /var/log/sa/sa29),因丢包指标(rxdrop/s、txdrop/s 等)仅存于该模式的历史日志中,实时 sar -n DEV 不包含;需先确认 sysstat 后台采集已启用(检查 /etc/default/sysstat 和 cron 任务),再通过 -f 指定文件、--iface 限定接口、-s/-e 截取时段、-p 显示真实设备名来精准分析;辅以 ifconfig 查当前累计 dropped 值比对时间范围。

要查历史网卡丢包率,核心是用 sar -n EDEV 读取 sysstat 归档的二进制日志文件,而不是实时命令——因为丢包(如 rxerr/s、txerr/s、rxdrop/s、txdrop/s)只在 -n EDEV 模式下记录,且仅保存在历史日志中,实时 sar -n DEV 不包含这些字段。
确认日志是否可用
丢包数据依赖 sysstat 的后台采集。先检查两点:
- /etc/cron.d/sysstat 文件存在且未被注释,确保 cron 正常触发数据收集
- /var/log/sa/(或 /var/log/sysstat/)下有对应日期的 saDD 文件(如今天是 7 月 29 日,就找 sa29),注意无后缀、不可直接 cat
若提示 No such file or directory,大概率是 sysstat 未启用:检查 /etc/default/sysstat 中 SYSSTAT_COLLECTOR 是否为 true,并确认服务已启动(sudo systemctl start sysstat)。
用 sar -n EDEV 读取丢包指标
执行命令读取指定日期的错误与丢包统计:
sar -n EDEV -f /var/log/sa/sa29
关键列说明:
- rxerr/s:每秒接收错误包数(物理层/CRC 错误等)
- txerr/s:每秒发送错误包数
- rxdrop/s:每秒因内核队列满等原因被丢弃的入向包
- txdrop/s:每秒被丢弃的出向包(较少见,多与 qdisc 或驱动有关)
- rxfifo/s、txfifo/s:FIFO 缓冲区溢出次数(典型丢包前兆)
若某接口丢包持续 > 0.1/s,尤其 rxdrop/s 突增,需结合内存压力、软中断负载进一步排查。
限定接口与时间段提升效率
避免全量输出干扰判断:
- 只查特定网卡:
sar -n EDEV -f /var/log/sa/sa29 --iface=eth0 - 截取上午 9–11 点数据(注意时间对齐到采集粒度,默认 10 分钟):
sar -n EDEV -f /var/log/sa/sa29 -s 09:00:00 -e 11:00:00 - 加
-p显示真实设备名(避免看到enp0s3却不知对应哪张物理卡):sar -n EDEV -p -f /var/log/sa/sa29
对比 ifconfig 当前丢包作辅助验证
历史 sar -n EDEV 反映的是过去状态,可运行以下命令看当前累计值:
ifconfig eth0 | grep -E "(RX|TX) packets.*errors|dropped|overruns"
输出中 dropped 字段即当前内核统计的总丢包数。若该值近期猛增,而 sar -n EDEV 显示昨日无丢包,说明问题发生在最近几小时,尚未归档进新 sa 文件——此时应切回实时监控(如 sar -n DEV 1 观察流量突增,再用 netstat -s | grep -i "packet drop" 定位协议栈层级)。


















