事件背景
公司內部有一條專線,連接測試環境,通過它給測試環境的機器也加上了域名解析,這也有利於更真實的模擬生產環境,從而避免一些因為網絡配置等原因產生的 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
測試如下:
到這里,該功能已經足夠我們解決很多問題!