教程 · 运维与排障
给新机器跑分:磁盘、CPU 与网络基准测试
难度
入门
预计时长
20 分钟
步骤
8 步
最近修订
基准系统
Debian 12
要点
给新机器跑分:磁盘、CPU 与网络基准测试
新机器到手先做三项测量:fio 测磁盘随机读写、sysbench 测 CPU、iperf3 或大文件下载测网络带宽。测试时留意 top 里的 %st(steal time)—— 它反映宿主机是否超售,比任何单项跑分更能说明这台机器长期是否稳定。
前置条件
开始之前,先确认这些都具备
- 一台刚开通、还没跑业务的服务器
- 磁盘至少有 2 GB 空闲空间
操作步骤
共 8 步
步骤 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 表示机械盘步骤 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步骤 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步骤 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步骤 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"步骤 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 反向,测下行步骤 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步骤 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]。 指出错误的邮件比沉默的旧文档有价值得多。