网络慢如蜗牛?教你几招Linux测带宽的绝活,让网络问题无处遁形!
昨天又有客户问我,说他们的应用突然变慢了,怀疑是网络问题。我问他网络带宽多少,他说不知道...这种情况我见得太多了,很多人遇到网络问题就是一脸懵,完全不知道从哪里下手。
其实测网络带宽这个事情,我刚开始做运维的时候也是摸着石头过河。记得有一次领导问我们机房的带宽利用率怎么样,我愣是说不出个所以然来,那个尴尬啊...从那以后我就下定决心要把这些基本功练扎实。
今天就来分享一下我这些年积累的Linux网络带宽测试经验,保证让你以后遇到网络问题不再抓瞎。
speedtest-cli - 最简单粗暴的方法
说到测带宽,我第一个想到的就是speedtest-cli。这玩意儿就像网页版的speedtest.net,但是可以在命令行里跑,特别适合我们这些服务器党。
安装很简单:
# CentOS/RHEL系列
yum install epel-release
yum install python-pip
pip install speedtest-cli
# Ubuntu/Debian系列
apt update
# 安装 pipx
sudo apt install pipx
pipx ensurepath
# 安装应用
pipx install speedtest-cli
#添加环境变量
echo 'export PATH="$PATH:/root/.local/bin"' >> ~/.bashrc
source ~/.bashrc
装好之后直接运行:
speedtest-cli
它会自动帮你选择最近的测试服务器,然后开始测试。输出大概是这样的:
不过有时候自动选择的服务器不太理想,你可以手动指定。先看看附近有哪些服务器:
speedtest-cli --list | grep China
然后选一个延迟比较低的:
speedtest-cli --server 服务器ID
我记得有一次我们的业务突然变慢,用户投诉不断。我用speedtest-cli一测,发现下载速度只有平时的一半,赶紧联系运营商,原来是他们在做线路维护忘记通知我们了。
iperf3 - 专业级的带宽测试工具
speedtest-cli虽然方便,但有个问题就是测试的是到公网的速度。如果你想测试内网带宽,或者两台服务器之间的带宽,那就得用iperf3了。
安装iperf3:
# CentOS/RHEL
yum install iperf3
# Ubuntu/Debian
apt install iperf3
iperf3需要一台服务器做服务端,一台做客户端。在服务端运行:
iperf3 -s
在客户端运行:
iperf3 -c 服务端IP
默认测试10秒钟,你也可以指定时间:
iperf3 -c 服务端IP -t 30
测试UDP带宽:
iperf3 -c 服务端IP -u
客户端结果:
服务端结果:
我特别喜欢用iperf3测试新部署的服务器之间的网络性能。有一次我们要在两个机房之间做数据同步,用iperf3测了一下专线带宽,发现实际速度比运营商承诺的要低不少,最后让他们重新调试了线路。
wget/curl - 简单实用的下载测试
有时候你就想快速测一下下载速度,不想装额外的工具,那wget和curl就够用了。
用wget测试:
wget -O /dev/null http://speedtest.tele2.net/100MB.zip
这个命令会下载一个100MB的文件到/dev/null(相当于丢弃),然后显示下载速度。
用curl测试:
curl -o /dev/null http://speedtest.tele2.net/100MB.zip
如果你想看更详细的信息:
curl -o /dev/null -w "下载速度: %{speed_download} bytes/sec\n总时间: %{time_total}s\n" http://speedtest.tele2.net/100MB.zip
这种方法的好处是可以测试到特定服务器的速度,比如你的CDN节点或者合作伙伴的服务器。
nload - 实时监控网络流量
有时候你不是要测最大带宽,而是想看看当前的网络使用情况,nload就很合适。
安装nload:
# CentOS/RHEL
yum install nload
# Ubuntu/Debian
apt install nload
运行很简单:
nload
它会显示一个实时的图表,显示当前的上传和下载速度。如果你有多个网卡,可以用左右箭头键切换。
我经常用nload来监控服务器的网络使用情况,特别是在做数据迁移或者大文件传输的时候,可以实时看到网络利用率。
iftop - 看看谁在占用带宽
iftop比nload更进一步,它不仅能显示总的流量,还能显示每个连接的流量情况。
安装iftop:
# CentOS/RHEL
yum install iftop
# Ubuntu/Debian
apt install iftop
运行需要root权限:
sudo iftop
iftop的界面有点像top命令,显示当前所有网络连接的流量情况。你可以看到每个IP地址的上传下载速度,这对于排查网络问题特别有用。
有一次我们的服务器网络突然变慢,用iftop一看,发现有个IP在疯狂下载数据,原来是有人在爬我们的网站...
nethogs - 进程级别的网络监控
如果你想知道是哪个进程在占用网络带宽,nethogs就派上用场了。
安装nethogs:
# CentOS/RHEL
yum install nethogs
# Ubuntu/Debian
apt install nethogs
运行:
sudo nethogs
nethogs会显示每个进程的网络使用情况,包括进程名、PID、用户等信息。这对于排查哪个应用程序占用带宽特别有用。
一些实用的测试技巧
选择合适的测试时间
网络带宽测试最好在不同时间段多测几次,因为网络状况会随时间变化。我一般会在早上、中午、晚上各测一次,这样能得到比较全面的数据。
注意测试方向
很多人只测下载速度,忽略了上传速度。但对于服务器来说,上传速度同样重要,特别是如果你的服务器需要向用户推送大量数据的话。
考虑并发连接
单线程测试得到的带宽可能不能反映真实情况。可以试试多线程测试:
iperf3 -c 服务端IP -P 4
这个命令会启动4个并行连接进行测试。
记录测试结果
我建议把测试结果记录下来,建立一个基线。这样以后出现问题的时候,你就能快速判断是不是网络带宽的问题了。
遇到问题怎么办
如果测试结果不理想,不要慌。我的经验是按这个顺序排查:
- 先确认是不是测试方法的问题,换个工具再测一次
- 检查服务器的网卡配置,看看是不是限速了
- 联系网络管理员或者运营商,确认线路状况
- 检查防火墙和安全组设置,看看是不是有限制
有一次我们的测试结果特别差,折腾了半天才发现是网卡驱动的问题,更新驱动之后速度立马就上来了。
写在最后
网络带宽测试看起来简单,但要做好还是需要一些经验的。我建议大家平时多练习,熟悉这些工具的使用方法。更重要的是,要建立定期测试的习惯,这样才能及时发现问题。
说实话,网络问题往往是最难排查的,因为涉及的环节太多了。但只要你掌握了这些基本的测试方法,至少能快速定位问题的大概范围,这就已经成功了一半。
记住,做运维最重要的就是要有数据支撑,不能凭感觉。网络慢不慢,不是你说了算,是测试结果说了算!
如果这篇文章对你有帮助,别忘了点赞转发支持一下!想了解更多运维实战经验和技术干货,记得关注微信公众号@运维躬行录,领取学习大礼包!!!我会持续分享更多接地气的运维知识和踩坑经验。让我们一起在运维这条路上互相学习,共同进步!
公众号:运维躬行录
个人博客:躬行笔记