事件背景
公司内部有一条专线,连接测试环境,通过它给测试环境的机器也加上了域名解析,这也有利于更真实的模拟生产环境,从而避免一些因为网络配置等原因产生的 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
测试如下:
到这里,该功能已经足够我们解决很多问题!