LINUX 从网卡入手限制带宽

事件背景

公司内部有一条专线,连接测试环境,通过它给测试环境的机器也加上了域名解析,这也有利于更真实的模拟生产环境,从而避免一些因为网络配置等原因产生的 BUG。

但是这两天接连收到反馈说环境卡的快打不开了,一开始想可能是人多嘛,带宽本来不高,卡卡可能正常,因为是间歇性的,就没那么在意。

今天自己使用的时候突然发现也很卡,刷新 git 都需要等待半天。

然后突然想到前两天将云服务器上面的 Samba 迁移到了内网,为了让同事随时随地都能使用,便开通的公网访问,连上服务器一看,果然,公网带宽全被吃完。

排查方法 

我的机器使用的是 CenOS 7.7,为了便于测试,我在 /tmp 目录下面放了一个文件 125M 的文件 image.tar:

这里文件下载使用 sz 命令,查看网卡带宽占用使用 iftop 命令。

安装依赖工具:

yum -y install lrzsz iftop git

安装完成后模拟下载:

sz -y image.tar

效果如图: 

可以在新窗口中查看,使用 iftop 查看指定网卡的带宽使用情况:

iftop -i ens33

结果如图:

可以看到带宽占用飙升!当然,如果这个服务是经过 nginx 这种中间件的服务还好,可以使用 limit 模块对请求进行各种限制。

但是这里显然不适合,这里没有可以限制的服务,所以就只能从网卡入手如限制它。

网卡限速

对于这个显示,我们采用的是网上一种常用的方案,因为我的防火墙是关闭的,也没法从防火墙入手。

这个服务的名称叫做:wondershaper

https://github.com/magnific0/wondershaper

可以使用 git 拉去最新版本,当然也可以使用 yum 仓库里面的,推荐使用 git 的方法:

git clone https://github.com/magnific0/wondershaper.git

安装:

git clone https://github.com/magnific0/wondershaper.git
cd wondershaper/
make install

如图:

启动服务并设置开机启动:

systemctl start wondershaper.service
systemctl enable wondershaper.service

查看该服务能做啥:

wondershaper -h

如图:

可以看到 -d 是下载限速,-u 是上传限速,-a 是指定网卡,-c 清除限速。这就是我们最常用的三个参数。

然后做个限速测试,我的网卡是 ens33:

wondershaper -a ens33 -d 100 -u 100

下载测试:

除了使用命令配置限速,也可以修改配置文件:

vim /etc/conf.d/wondershaper.conf

内容如下:

[wondershaper]
# Adapter
#
IFACE="ens33"

# Download rate in Kbps
#
DSPEED="100"

# Upload rate in Kbps
#
USPEED="100"

当然,也可以解除限速:

wondershaper -c -a ens33

测试如下:

到这里,该功能已经足够我们解决很多问题!

原文地址:https://www.cnblogs.com/Dy1an/p/12170515.html