跳到主要内容
注册无需实名认证
安云主机 AnYun VPS

教程 · 运维与排障

给新机器跑分:磁盘、CPU 与网络基准测试

难度

入门

预计时长

20 分钟

步骤

8

最近修订

基准系统

Debian 12

要点

给新机器跑分:磁盘、CPU 与网络基准测试

新机器到手先做三项测量:fio 测磁盘随机读写、sysbench 测 CPU、iperf3 或大文件下载测网络带宽。测试时留意 top 里的 %st(steal time)—— 它反映宿主机是否超售,比任何单项跑分更能说明这台机器长期是否稳定。

前置条件

开始之前,先确认这些都具备

  • 一台刚开通、还没跑业务的服务器
  • 磁盘至少有 2 GB 空闲空间

操作步骤

8

  1. 步骤 01 / 08

    先记录基线信息 #

    跑分数字脱离硬件信息就没有意义。先把 CPU 型号、内存、磁盘类型和内核版本记下来,将来对比不同机房、不同时间的结果时才有参照。

    Shell
    lscpu | grep -E "Model name|CPU\(s\)|MHz"
    free -h
    df -h /
    uname -r
    cat /sys/block/vda/queue/rotational   # 0 表示 SSD/NVMe,1 表示机械盘
  2. 步骤 02 / 08

    用 fio 测磁盘随机读 #

    数据库和 Web 应用的实际负载是小块随机读写,不是顺序大文件。4k 随机读的 IOPS 才是有意义的指标。--direct=1 绕过页缓存,否则你测的是内存速度。测完记得删掉测试文件。

    Shell
    sudo apt install -y fio
    
    fio --name=randread --filename=/root/fiotest --size=1G \
        --ioengine=libaio --direct=1 --rw=randread --bs=4k \
        --numjobs=1 --iodepth=32 --runtime=60 --time_based \
        --group_reporting
    
    rm -f /root/fiotest
  3. 步骤 03 / 08

    再测一次随机写 #

    很多机器读得快、写得慢,尤其是超售严重或者用了廉价 SSD 的。随机写的结果对数据库负载更有参考价值。存储型机器(大盘鸡)用的是机械盘,随机 IOPS 天然低两三个数量级,那是容量型产品的正常表现,不是故障。

    Shell
    fio --name=randwrite --filename=/root/fiotest --size=1G \
        --ioengine=libaio --direct=1 --rw=randwrite --bs=4k \
        --numjobs=1 --iodepth=32 --runtime=60 --time_based \
        --group_reporting
    
    rm -f /root/fiotest
  4. 步骤 04 / 08

    dd 只用来看顺序写,并且要加 oflag=direct #

    dd 简单但局限大:它测的是顺序写,代表不了数据库负载;不加 oflag=direct 的话写进的是页缓存,得到的数字漂亮但毫无意义。把它当作一个粗略的对照,别当结论。

    Shell
    dd if=/dev/zero of=/root/ddtest bs=1M count=1024 oflag=direct
    rm -f /root/ddtest
  5. 步骤 05 / 08

    测 CPU #

    sysbench 的质数计算是单纯的 CPU 密集任务,用来横向对比同价位机型很方便。线程数设成核心数,测两轮取一致的那个结果 —— 共享宿主机上的单次结果波动可能很大。

    Shell
    sudo apt install -y sysbench
    
    sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) run | grep -E "events per second|total time"
  6. 步骤 06 / 08

    测网络带宽 #

    最可信的做法是用自己控制的另一台机器做对端 —— 公共测试服务器的负载与限速你无从得知。一端跑服务端,一端跑客户端,-P 4 用四条并发流,更接近真实下载的表现。

    Shell
    sudo apt install -y iperf3
    
    # 在你自己的另一台服务器上(对端)
    iperf3 -s
    
    # 在被测机器上
    iperf3 -c 对端IP -P 4 -t 30
    iperf3 -c 对端IP -P 4 -t 30 -R   # -R 反向,测下行
  7. 步骤 07 / 08

    看 steal time —— 比跑分更重要的指标 #

    %st 表示你的虚拟机想用 CPU 却被宿主机调度走的时间比例。长期高于百分之几,说明宿主机被超售了:跑分再好看,业务高峰时也会莫名其妙地卡。这一项要观察一段时间,而不是看一眼截图。

    Shell
    top -bn1 | head -n 5      # 看 %Cpu(s) 那一行的 st
    vmstat 1 10               # 最后一列 st
    
    # 持续观察:跑一天再回来看
    sudo apt install -y sysstat
    sar -u 1 5
  8. 步骤 08 / 08

    对第三方一键脚本的态度 #

    社区里流行的一键测试脚本确实方便,但它们以 root 权限执行、会拉取外部资源。用之前先下载下来读一遍,确认它做了什么;下载测速用的大文件地址也请确认来源。养成这个习惯,比任何跑分数字都值钱。

    Shell
    # 正确姿势:先下载,再阅读,最后执行
    curl -fsSLO https://来源地址/bench.sh
    less bench.sh
    bash bench.sh
    
    # 简易下行测速:用一个你信任的大文件地址
    curl -o /dev/null -w '平均速度 %{speed_download} B/s\n' https://来源地址/100mb.test

常见错误

这一步最容易踩的坑

下面每一条都对应一个真实会发生的故障。先读完再动手,比出问题之后再回来查要省时间。

  • 在生产高峰期跑 fio。它会把磁盘 IO 打满,业务会跟着一起卡。
  • 测试文件把磁盘写满。fio 的 --size 要留足余量,测完立刻删除。
  • 只用 dd 顺序写就下结论。数据库的痛点是 4k 随机 IOPS,两者可以差出一个数量级。
  • 只跑一次就下结论。共享宿主机上的结果本来就有波动,至少测三次取中位。
  • 拿公共 iperf3 服务器测。对端的负载与限速你不知道,测出来的是对端的状态。
  • 忽略 %st。跑分好看但 steal time 高的机器,日常体验往往比跑分平庸但独占资源的机器更差。
  • 拿存储型机器(机械盘)的随机 IOPS 和 NVMe 机型对比。它们是两类产品,容量优先的机型本来就不追求随机性能。

这篇教程的边界

  • 命令以 Debian 12 为准。Ubuntu 与 Rocky Linux 的差异只在正文明确标注之处,未标注的部分请以你所用发行版的官方文档为准。
  • 示例中的 IP 来自文档保留段 203.0.113.0/24,域名为 example.com,端口为示意值。复制后必须替换成自己的值, 原样执行不会有任何效果。
  • 教程不能替代备份。任何会改动数据或线上流量的步骤,执行前先确认有一份验证过能恢复的备份。
  • 本站不提供任何用于绕过网络审查的配置或说明,这篇也不例外。

发现命令过时或有误,请发邮件到 [email protected]。 指出错误的邮件比沉默的旧文档有价值得多。

联系 工单
扫码
手机访问

扫码在手机上打开