ethtool 是一个 Linux 下的网络管理工具,可以用于 网卡状态/驱动版本信息查询、收发数据信息查询 以及查询和配置 网卡工作模式/链路速度 等。
介绍
ethtool 是 Linux 下用于查询及设置网卡参数的命令,是网络运维和排查网卡故障时不可或缺的工具。它可以让你查看网卡的物理层状态(如速度、双工模式)、驱动信息、以及修改网卡的高级特性(如卸载功能、队列长度等)。
安装方法
大多数 Linux 发行版默认已安装,如果没有,可以使用包管理器安装:
- CentOS/RHEL:
yum install ethtool
- Ubuntu/Debian:
apt install ethtool
基本语法
- 提示:网卡接口名通常为
eth0, ens33, enp0s3 等,可用 ip addr 查看。
运维常用命令
参数说明:
-k 查询网卡的Offload信息
-K 修改网卡的Offload信息
-c 查询网卡聚合信息
-C 修改网卡聚合信息
-l 查看网卡队列数
-L 设置网卡队列数
查看网卡基础信息
用于确认网卡是否连通、协商速率是多少、双工模式等。
关键输出解读:
- Speed: 当前速率(如 1000Mb/s, 10000Mb/s)。
- Duplex: 双工模式(Full 全双工 / Half 半双工)。
- Link detected: 物理链路是否连通(
yes 表示网线已插好且有信号)。
- Auto-negotiation: 自动协商是否开启(通常应为
on)。
查看网卡驱动和固件版本
在处理兼容性问题或升级驱动前,需要确认当前版本。
关键输出:
- driver: 驱动名称(如
igb, ixgbe, e1000e)。
- version: 驱动版本。
- firmware-version: 硬件固件版本。
- bus-info: PCI 总线地址(用于定位物理硬件)。
查看网卡统计数据(丢包/错误排查神器)
当网络慢或有丢包时,查看详细的网卡计数器,比 ifconfig 更详细。
- 技巧:输出内容很多,通常配合
grep 使用,例如查找丢包或错误:
ethtool -S eth0 | grep -iE "drop|error|fail"
点亮网卡指示灯(物理定位)
在数据中心机房中,面对几百台服务器,如何知道你要维护的是哪台?或者是哪根网线?
该命令会让指定网卡的 LED 灯闪烁。
- 含义: 让
eth0 的指示灯闪烁 10 秒。如果不加时间,会一直闪烁直到按 Ctrl+C。
查看和调整环形缓冲区(Ring Buffer)
如果服务器网络吞吐量很大,出现丢包(rx_missed_errors),可能是网卡缓冲区太小。
-
查看当前和最大支持的大小:
Pre-set maximums: 硬件支持的最大值。
Current hardware settings: 当前设置值。
-
修改缓冲区大小(性能调优):
# 将接收(RX)和发送(TX)缓冲区都设置为 4096
ethtool -G eth0 rx 4096 tx 4096
查看和修改网卡卸载特性(Offload)
现代网卡支持将部分 CPU 的工作(如校验和计算、分片)卸载到网卡硬件上处理,以降低 CPU 负载。
# 查看
ethtool -k ens33
# 关闭 GRO
ethtool -K ens33 gro off
# 开启vxlan offload
ethtool -K ens33 rx-checksum on
ethtool -K ens33 tx-udp_tnl-segmentation on
强制设置网卡速率和双工模式
警告:仅在自动协商失败或排查特定故障时使用。若配置与交换机端口不匹配,会导致网络断开。
# 关闭自动协商,强制全双工,速率 1000Mb/s
ethtool -s eth0 speed 1000 duplex full autoneg off
如果要恢复默认(推荐):
ethtool -s eth0 autoneg on
唤醒功能 (Wake-on-LAN)
查看或设置网卡是否支持远程唤醒。
或者设置开启魔术包唤醒:
Channel 参数
# 查看Channel parameters
$ ethtool -l ens33
# 开启网卡多队列
ethtool -L ens33 combined 4
经验总结与注意事项
- 临时性: 直接使用
ethtool 命令修改的配置(如速率、Ring Buffer、Offload 特性)通常是临时生效的,重启服务器后会失效。
- 持久化配置:
- CentOS/RHEL: 将参数写入
/etc/sysconfig/network-scripts/ifcfg-eth0 文件中(通常使用 ETHTOOL_OPTS 变量,或者通过开机脚本 rc.local 执行)。
- Ubuntu/Debian (Netplan): 在 yaml 配置文件中可以通过
link-properties 或 renderer: NetworkManager 进行部分设置,或者使用 networkd-dispatcher 脚本。
- 远程操作风险: 在远程 SSH 调整网卡速率(Speed/Duplex)时要非常小心,一旦配置错误(例如服务器强制 1000M,交换机还在 100M),网络会瞬间中断,只能去机房接显示器恢复。
快速排查流程示例
如果你遇到一台服务器网络极慢:
- 先看物理连接对不对:
ethtool eth0 (检查 Speed 是否协商到了 1000/10000,Link 是否为 yes)。
- 看有没有物理层面的丢包:
ethtool -S eth0 | grep -iE "drop|err"。
- 如果发现
rx_missed 错误增长,检查缓冲区:ethtool -g eth0,如果 Current 远小于 Maximum,考虑调大。
F&Q
rx_missed_errors
rx_missed_errors(接收丢失错误)通常指的是网卡(NIC)接收到的数据包,但是由于某种原因被网卡或驱动程序丢弃,而没有成功提交给操作系统内核进行处理。最主要的原因:
- 接收环形缓冲区(RX Ring Buffer/FIFO)溢出
- 网卡或驱动程序特定的丢包计数
解决:增大缓冲区
# 查看最大值,例如: sudo ethtool -g eth0
sudo ethtool -g <interface_name>
# 例如,如果最大值是 4096,你可以尝试设置为 2048 或更大。
sudo ethtool -G <interface_name> rx <new_size>