在Linux系统中,设置网卡速度慢可能涉及主动限速(如测试网络环境、限制特定服务带宽)或排查异常导致的性能下降,本文将从主动设置方法、异常排查步骤及常用工具使用角度,详细说明如何操作及注意事项。
主动设置网卡速度慢的方法
使用ethtool工具调整网卡速率与双工模式
ethtool
是Linux下用于查询和设置网卡参数的核心工具,可直接修改网卡的工作速率(如100Mbps、1Gbps)和双工模式(全双工/半双工),从而主动降低速度。
操作步骤:
- 安装ethtool(若未安装):
sudo apt install ethtool # Debian/Ubuntu sudo yum install ethtool # CentOS/RHEL
- 查看当前网卡参数(以eth0为例):
ethtool eth0
输出中
Speed
表示当前速率(如1000Mbps),Duplex
表示双工模式(如Full)。 - 设置速率为100Mbps,半双工模式(强制低速):
sudo ethtool -s eth0 speed 100 duplex half
若需恢复自动协商,添加
autoneg on
参数:sudo ethtool -s eth0 autoneg on
注意事项:
- 强制设置非协商模式可能导致链路异常,需确保对端设备支持相同参数;
- 部分老旧网卡可能不支持半双工模式,设置后可能出现连接中断。
使用tc(Traffic Control)进行流量控制
tc
是Linux内核的流量控制工具,可通过令牌桶(token bucket)、过滤器(filter)等机制限制网卡的带宽,实现更精细的速率控制(如限制上传/下载速度)。
操作步骤:
- 安装tc(通常已预装,若缺失可通过
iproute2
包安装):sudo apt install iproute2 # Debian/Ubuntu
- 限制eth0上传带宽为10Mbps(示例):
sudo tc qdisc add dev eth0 root tbf rate 10mbit burst 32kbit latency 400ms
参数说明:
rate
:平均速率(10Mbps);burst
:突发流量大小(32kbit);latency
:延迟时间(400ms)。
- 删除限速规则:
sudo tc qdisc del dev eth0 root
进阶应用:
- 通过
filter
限制特定IP的带宽(如限制192.168.1.100的上传为5Mbps):sudo tc qdisc add dev eth0 root handle 1: htb default 30 sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 5mbit sudo tc filter add dev eth0 protocol ip parent 1:0 prio 0 u32 match ip dst 192.168.1.100 flowid 1:10
调整网卡驱动参数(中断合并)
中断合并(Interrupt Coalescence)是网卡通过合并多个中断请求以减少CPU开销的机制,但过高的合并度会导致延迟增加,降低实际速度,通过调整相关参数可主动降低性能。
操作步骤:
- 查看当前中断合并参数:
ethtool -c eth0
输出中
rx-usecs
、tx-usecs
分别表示接收/发送中断的合并时间(单位:微秒)。 - 减少中断合并时间(降低性能):
sudo ethtool -C eth0 rx-usecs 100 tx-usecs 100
数值越小,中断越频繁,CPU负载越高,网卡速度可能越低。
- 恢复默认值:
sudo ethtool -C eth0 rx-usecs 0 tx-usecs 0
修改MTU(最大传输单元)
MTU表示网络接口一次可传输的最大数据包大小(默认通常为1500字节),较小的MTU会增加数据包分片数量,降低传输效率,从而间接降低速度。
操作步骤:
- 查看当前MTU:
ip link show eth0
- 设置MTU为500字节(示例):
sudo ip link set eth0 mtu 500
- 恢复默认MTU:
sudo ip link set eth0 mtu 1500
排查异常导致的网卡速度慢
若非主动设置,需排查以下常见问题:
网卡驱动与硬件兼容性
- 检查驱动版本:
ethtool -i eth0
若驱动过旧,可通过
dkms
更新或安装官方驱动。 - 测试硬件:使用
mii-tool
(老旧网卡)或ethtool -T eth0
(时间戳同步)检查链路稳定性,若频繁协商失败可能是网卡或网线故障。
系统资源占用
- CPU/内存高负载:通过
top
、htop
查看,若因资源不足导致网卡处理延迟,需优化进程或升级硬件。 - 中断不均衡:多核CPU下,可通过
irqbalance
服务或手动绑定中断到特定CPU核(如echo eth0 > /proc/irq/10/smp_affinity
)。
网络拥塞与配置错误
- 检查MTU匹配:确保对端设备MTU一致,避免分片导致速度下降。
- 关闭不必要的网络服务:如
NetworkManager
可能与ifcfg
配置冲突,可通过systemctl stop NetworkManager
测试。
常用参数速查表
工具 | 参数/命令 | 作用说明 |
---|---|---|
ethtool | ethtool -s eth0 speed 100 |
设置网卡速率为100Mbps |
ethtool | ethtool -C eth0 rx-usecs 100 |
调整接收中断合并时间为100微秒 |
tc | tc qdisc add dev eth0 root tbf rate 10mbit |
限制带宽为10Mbps |
ip | ip link set eth0 mtu 500 |
设置MTU为500字节 |
相关问答FAQs
Q1:为什么使用ethtool设置网卡速率为100Mbps后,实际速度仍低于预期?
A:可能原因包括:① 对端设备未同步速率(需检查对端网卡是否支持100Mbps并开启自动协商);② 网线质量差(如超五类线无法稳定支持100Mbps以上速率);③ 系统资源占用(CPU高负载导致网卡数据处理延迟),可通过ethtool -d eth0
查看网卡卸载功能(如LRO、GRO)是否关闭,关闭这些功能可减少CPU负担但可能降低吞吐量。
Q2:如何临时降低网卡速度用于压力测试,且不影响系统其他服务?
A:推荐使用tc
工具结合HTB
(分层令牌桶)队列,仅限制目标测试服务的带宽,而非全局限速,限制本地8080端口的上传带宽为1Mbps:
sudo tc qdisc add dev eth0 root handle 1: htb default 30 sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1mbit sudo tc filter add dev eth0 protocol ip parent 1:0 prio 0 u32 match ip sport 8080 0xffff flowid 1:10
测试完成后通过tc qdisc del dev eth0 root
删除规则,避免影响其他服务。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/25813.html