一、测试前的准备工作
-
明确测试目标:您需要测试什么?
-
基准测试:了解服务器的基本性能指标,用于选型对比。
-
压力/负载测试:找到服务器的性能瓶颈和极限容量。
-
稳定性测试:长时间高负载下,服务器是否会出错或性能下降。
-
应用性能测试:模拟真实业务场景,看应用运行是否流畅。
-
-
记录初始环境:
-
服务器配置:记录CPU型号、核心数、内存大小、磁盘类型(SSD/高效云盘等)和大小、带宽。
-
操作系统:记录系统镜像版本(如 CentOS 7.9, Ubuntu 22.04)。
-
测试时间:选择业务低峰期进行,避免影响线上服务(如果是生产环境)。
-
-
安装基本工具:
通常使用包管理工具直接安装,例如在CentOS/RedHat系使用yum,在Debian/Ubuntu系使用apt。# CentOS/RHEL/Fedora/Alibaba Linux sudo yum install -y sysbench hdparm iperf3 # Debian/Ubuntu sudo apt-get update sudo apt-get install -y sysbench hdparm iperf3
二、分项性能测试
我们将从 CPU、内存、磁盘I/O、网络 四个核心维度进行测试。
1. CPU 性能测试
CPU主要考察计算能力和单核/多核效能。
-
常用工具:
sysbench,geekbench(更专业) -
测试命令(使用 sysbench):
# 1. 查看CPU信息,确认核心数 cat /proc/cpuinfo | grep "processor" | wc -l cat /proc/cpuinfo | grep "model name" # 2. 进行CPU压力测试(使用素数计算) # --cpu-max-prime: 计算素数上限,越大计算时间越长 # --threads: 线程数,用于测试单核或多核性能 sysbench cpu --cpu-max-prime=20000 --threads=1 run sysbench cpu --cpu-max-prime=20000 --threads=`nproc` run # nproc会返回CPU总核心数
-
关键结果:
-
events per second: 每秒完成的事件数。这个值越高,代表CPU计算性能越强。对比单线程和多线程的数值,可以看出多核并行效率。
-
2. 内存性能测试
内存主要测试读写速度和延迟。
-
常用工具:
sysbench -
测试命令:
# 测试内存读写速度 # --memory-total-size: 总数据传输大小 # --memory-oper: 指定读或写操作 sysbench memory --memory-total-size=10G --memory-access-mode=rnd run
-
关键结果:
-
Total operations和Operations per second: 每秒操作次数,包括读和写。数值越高,内存性能越好。 -
MiB transferred和MiB per second: 每秒传输的数据量,更直观。
-
3. 磁盘 I/O 性能测试
这是云服务器测试的重中之重,不同磁盘类型(如SSD和HDD)性能差异巨大。主要测试读写速度(吞吐量)和IOPS(每秒读写次数)。
-
常用工具:
fio(推荐,功能强大且准确),dd(简单粗略),hdparm(简单读测试) -
测试命令:
A. 使用
fio(专业首选):
创建一个测试配置文件test.fio,内容如下:[global] ioengine=libaio direct=1 size=1G group_reporting time_based runtime=60 [seq-read] bs=1M rw=read numjobs=1 [rand-read] bs=4k rw=randread numjobs=4 [seq-write] bs=1M rw=write numjobs=1 [rand-write] bs=4k rw=randwrite numjobs=4
运行测试:
fio test.fio
B. 使用
dd(快速粗略测试):# 测试顺序写速度(注意:这会生成一个1G的测试文件,操作前确保磁盘空间足够) dd if=/dev/zero of=./testfile bs=1G count=1 oflag=direct conv=fdatasync # 测试顺序读速度(测试完成后,清除测试文件) echo 3 | sudo tee /proc/sys/vm/drop_caches # 清空缓存以获得真实读速度 dd if=./testfile of=/dev/null bs=1G count=1 # 清理 rm -f testfile
-
关键结果 (
fio输出):-
READ/WRITE: bw: 带宽/吞吐量(如 MiB/s),顺序读写看这个。 -
READ/WRITE: iops: IOPS(如 k=1000),随机读写看这个,对数据库、网站等应用至关重要。 -
lat: 延迟,单位微秒(usec)或毫秒(msec),越低越好。
-
4. 网络性能测试
网络测试包括带宽、延迟、丢包率。测试需两台在同一地域同一可用区(最好有私有网络互通)的云服务器,一台作服务端,一台作客户端。
-
常用工具:
iperf3(测带宽),ping(测延迟和丢包) -
测试命令:
在服务器A(服务端)上:
iperf3 -s在服务器B(客户端)上:
# 测试TCP带宽 iperf3 -c <服务器A的内网IP> -t 60 # 测试UDP带宽和丢包(更接近真实网络应用) iperf3 -c <服务器A的内网IP> -u -b 1000M -t 60 # 使用ping测试延迟和丢包 ping <服务器A的内网IP> # 按Ctrl+C终止,会显示统计信息
-
关键结果:
-
iperf3TCP测试中的[ ID] Interval Transfer Bitrate: 带宽,Receiver一行的Bitrate是实际测得的带宽。 -
iperf3UDP测试中的Lost/Total Datagrams: 丢包率。 -
ping结果中的time和packet loss: 延迟和丢包率。
-
三、综合与应用性能测试
-
UnixBench: 一个古老的、全面的系统基准测试工具,提供一个综合得分,便于不同机器之间横向对比。
-
应用层面测试:使用针对特定应用的测试工具,如:
-
Web服务器:
ab(Apache Benchmark),wrk -
数据库:自带的基准测试工具或
sysbench的数据库测试模式。 -
自定义脚本:模拟用户真实操作流程。
-
四、测试注意事项与建议
-
多次测试取平均值:单次测试可能有波动,进行3-5次测试取平均值更可靠。
-
关闭不必要的进程:测试前关闭非核心软件,避免干扰。
-
区分内网与外网:网络测试一定要区分内网带宽(通常免费且带宽极大)和外网带宽(购买时设定的带宽)。性能测试主要关注内网带宽。
-
理解“超售”:云服务商的资源是共享的(尤其是CPU),您的邻居服务器活动可能会在极端情况下影响您的性能(Noisy Neighbor)。稳定性测试(如24小时压力测试)有助于发现此类问题。
-
对比官方数据:将您的测试结果与云服务商官方宣称的性能(如IOPS)进行对比,如果差距巨大,可以提交工单咨询。
-
选择同地域机器:网络测试时,确保两台机器在同一个地域和可用区,并通过内网连接,这样才能测出网络峰值性能。
总结:快速上手流程
如果您想快速对一台新云服务器有个基本了解,可以按以下顺序:
-
cat /proc/cpuinfo(看CPU型号和核心数) -
free -h(看内存大小) -
dd命令粗略测试磁盘写速度。 -
sysbench cpu run测试CPU。 -
ping同可用区的另一台机器,看内网延迟。 -
(可选) 运行
UnixBench得到一个综合分。
对于生产环境,强烈建议使用 fio 和 iperf3 进行更精确和深入的磁盘与网络测试。