ethtool是一个Linux下的网络管理工具,可以用于网卡状态/驱动版本信息查询、收发数据信息查询以及查询和配置网卡工作模式/链路速度等。
介绍
ethtool 是 Linux 下用于查询及设置网卡参数的命令,是网络运维和排查网卡故障时不可或缺的工具。它可以让你查看网卡的物理层状态(如速度、双工模式)、驱动信息、以及修改网卡的高级特性(如卸载功能、队列长度等)。
安装方法
大多数 Linux 发行版默认已安装,如果没有,可以使用包管理器安装:
- CentOS/RHEL:
yum install ethtool - Ubuntu/Debian:
apt install ethtool
基本语法
ethtool [参数] [网卡接口名]- 提示:网卡接口名通常为
eth0,ens33,enp0s3等,可用ip addr查看。
运维常用命令
参数说明:
-k查询网卡的Offload信息-K修改网卡的Offload信息-c查询网卡聚合信息-C修改网卡聚合信息-l查看网卡队列数-L设置网卡队列数
查看网卡基础信息
用于确认网卡是否连通、协商速率是多少、双工模式等。
ethtool eth0关键输出解读:
- Speed: 当前速率(如 1000Mb/s, 10000Mb/s)。
- Duplex: 双工模式(Full 全双工 / Half 半双工)。
- Link detected: 物理链路是否连通(
yes表示网线已插好且有信号)。 - Auto-negotiation: 自动协商是否开启(通常应为
on)。
查看网卡驱动和固件版本
在处理兼容性问题或升级驱动前,需要确认当前版本。
ethtool -i eth0关键输出:
- driver: 驱动名称(如
igb,ixgbe,e1000e)。 - version: 驱动版本。
- firmware-version: 硬件固件版本。
- bus-info: PCI 总线地址(用于定位物理硬件)。
查看网卡统计数据(丢包/错误排查神器)
当网络慢或有丢包时,查看详细的网卡计数器,比 ifconfig 更详细。
ethtool -S eth0- 技巧:输出内容很多,通常配合
grep使用,例如查找丢包或错误: bashethtool -S eth0 | grep -iE "drop|error|fail"
点亮网卡指示灯(物理定位)
在数据中心机房中,面对几百台服务器,如何知道你要维护的是哪台?或者是哪根网线? 该命令会让指定网卡的 LED 灯闪烁。
ethtool -p eth0 10- 含义: 让
eth0的指示灯闪烁 10 秒。如果不加时间,会一直闪烁直到按 Ctrl+C。
查看和调整环形缓冲区(Ring Buffer)
如果服务器网络吞吐量很大,出现丢包(rx_missed_errors),可能是网卡缓冲区太小。
-
查看当前和最大支持的大小:
bashethtool -g eth0Pre-set maximums: 硬件支持的最大值。Current hardware settings: 当前设置值。
-
修改缓冲区大小(性能调优):
bash# 将接收(RX)和发送(TX)缓冲区都设置为 4096 ethtool -G eth0 rx 4096 tx 4096
查看和修改网卡卸载特性(Offload)
现代网卡支持将部分 CPU 的工作(如校验和计算、分片)卸载到网卡硬件上处理,以降低 CPU 负载。
-
查看特性状态:
bashethtool -k eth0 -
修改特性(例如关闭 TSO - TCP Segmentation Offload):
bashethtool -K eth0 tso off- 场景: 某些 Kubernetes 环境或旧式防火墙可能会因为 TSO 导致数据包莫名丢失,此时需要尝试关闭它。
# 查看
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)
查看或设置网卡是否支持远程唤醒。
ethtool eth0 | grep Wake或者设置开启魔术包唤醒:
ethtool -s eth0 wol gChannel 参数
# 查看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脚本。
- CentOS/RHEL: 将参数写入
- 远程操作风险: 在远程 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>