场景
在购买云服务器时,我们通常最关注的是网络带宽,因为它会直接影响视频加载和文件下载速度。因此,了解网络情况是非常重要的。通过简单的命令和bash脚本,我们可以轻松测试服务器的网络带宽。
实现
在linux下我们可以通过ifconfig命令查看网络接口信息,如下
root@ht2024052301456:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
inet 10.0.107.2 netmask 255.255.255.0 broadcast 10.0.107.255
ether 22:8f:62:00:00:c9 txqueuelen 1000 (Ethernet)
RX packets 746071 bytes 1374008810 (1.3 GB)
RX errors 0 dropped 1 overruns 0 frame 0
TX packets 639479 bytes 1006302889 (1.0 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 168 bytes 12908 (12.9 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 168 bytes 12908 (12.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我们主要关注RX packets(接受数据=>下载)和TX packets(发送数据=>上传)
RX packets 746071 bytes 1374008810 (1.3 GB)
- `RX packets 746071`: 接收的数据包数量。
- `bytes 1374008810 (1.3 GB)`: 接收到的总字节数。
TX packets 639479 bytes 1006302889 (1.0 GB)
- `TX packets 639479`: 发送的数据包数量。
- `bytes 1006302889 (1.0 GB)`: 发送的总字节数。
网速指的是每秒传输的数据量。我们可以使用bash脚本,通过每秒打印网卡当前的数据量并减去上一次的数据量,从而实现下载和上传速度的测量。
1.创建一个bash脚本net_speed.sh,内容如下。(eth0 修改为监控的网络接口名称)。
#!/bin/bash
# 网卡接口名称
INTERFACE="eth0:"
# 获取当前接收和发送的字节数
get_bytes() {
RX_BYTES=$(awk -v iface="$INTERFACE" '$1 ~ iface {print $2}' /proc/net/dev)
TX_BYTES=$(awk -v iface="$INTERFACE" '$1 ~ iface {print $10}' /proc/net/dev)
}
# 将字节数转换为合适的单位
convert_bytes() {
local bytes=$1
local unit="B"
if [ "$bytes" -ge 1048576 ]; then
bytes=$(echo "scale=2; $bytes/1048576" | bc)
unit="MB"
elif [ "$bytes" -ge 1024 ]; then
bytes=$(echo "scale=2; $bytes/1024" | bc)
unit="KB"
fi
echo "$bytes $unit"
}
# 初始化字节计数
get_bytes
PREV_RX_BYTES=$RX_BYTES
PREV_TX_BYTES=$TX_BYTES
while true
do
# 延时 1 秒
sleep 1
# 获取当前字节数
get_bytes
# 计算下载和上传速度
RX_DIFF=$((RX_BYTES - PREV_RX_BYTES))
TX_DIFF=$((TX_BYTES - PREV_TX_BYTES))
# 打印下载和上传速度
RX_RATE=$(convert_bytes $RX_DIFF)
TX_RATE=$(convert_bytes $TX_DIFF)
echo "Download speed: $RX_RATE/s, Upload speed: $TX_RATE/s"
# 更新前一个字节计数
PREV_RX_BYTES=$RX_BYTES
PREV_TX_BYTES=$TX_BYTES
done
2.赋予脚本执行权限。
chmod +x net_speed.sh
3.运行脚本
./net_speed.sh
测试
| 配置 | |
|---|---|
| 云服务器 | 1核1G 5 Mbps 美国 |
| 目标 | 油管视频 - 1440p |
可以看到下载速度基本在600kb/s以上(约等于5mbps / 8 = 625kb/s),几乎达到了带宽上限,但还是会打圈,无法流畅播放2K视频。切换到1080p分辨率后则可以流畅观看。
题外话
本来是想看看购买一个美国服务器,访问一下gpt看看gpt-4o怎样的,结果访问不了,血亏。美国的延迟200多去,香港的才50左右,不过还好才买了一个月¥18。