云服务器带宽简单测试:5 Mbps能否流畅播放2K视频?

501 阅读3分钟

场景

在购买云服务器时,我们通常最关注的是网络带宽,因为它会直接影响视频加载和文件下载速度。因此,了解网络情况是非常重要的。通过简单的命令和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分辨率后则可以流畅观看。

QQ截图20240523191930.png

题外话

本来是想看看购买一个美国服务器,访问一下gpt看看gpt-4o怎样的,结果访问不了,血亏。美国的延迟200多去,香港的才50左右,不过还好才买了一个月¥18。