本文将给大家展示Vultr VPS的基准性能测试报告,我这次测试的是3.5美元/月的这款,日本节点,官方介绍参数是如下图这样:
本次对Vultr VPS基准性能测试主要包括5个项目:硬件配置、宝塔跑分、UnixBench跑分、网络带宽、硬盘IO读写和CPU压测等,希望通过本次测试对Vultr的VPS硬件有一个比较全面的了解。
关于测试数据的声明
请注意,所有的测试数据为测试时的实时数据,不能排除商家在不同的时间对方案和配置进行调整。测试数据仅供参考,不能作为产品购买依据。
硬件配置
拿到一个VPS后,首先要做的当然是看看这个VPS的硬件配置,一般上不会存在官宣2核却只有1核这样的欺骗买卖,毕竟太容易被发现了。主要是想通过查看硬件配置来初步了解VPS的基准性能。
CPU
首先查看CPU。查看CPU的命令是:
[root@vultr ~]# cat /proc/cpuinfo
得出结果如下图所示:
结果显示,物理CPU个数是1个:physical id : 0
,每个物理CPU核数是1:cpu cores : 1
,总核数是:物理CPU个数 x CPU核数 = 1 x 1 = 1。
CPU主频cpu MHz
是2394,即是@2.40GHz的主频。
而CPU二级缓存cache size
有16384KB。
从以上参数可以了解到,Vultr的VPS硬件是非常不错的,我查了下国内某知名IDC的云主机硬件,CPU主频是2.0GHz,而二级缓存只有4096KB,这个缓存跟Vultr的相比差太多了。
后面还将进行CPU压力测试,并对测试结果进行排名,看看这个CPU在VPS评测网(vps5u)所有测试的VPS里的排名情况。
内存
CPU和内存是两个最主要的VPS硬件参数,上面查了CPU,现在再看看内存如何。查看VPS内存可以使用这个命令:
[root@vultr ~]# cat /proc/meminfo && free
显示结果如下图所示:
结果显示,内存总量是498664kB,即是(498664/1024=487)MB,比官宣的512M内存少了一些,但是不要惊讶,因为这个内存总量(MemTotal)并非物理内存总量,而是物理内存总量减去BIOS等要保留的一些内存,以及减去内核要保留的一些内存,剩下的才是这个MemTotal。这个MemTotal可理解为系统可用的总内存。
其他涉及的几个主要参数:MemFree、MemAvailable、Buffer、Cache、used、Swap,可看上图里的解释,说得很清楚了。
硬盘
检查硬盘主要看看硬盘的容量,以及有几个硬盘。查看命令是:
[root@vultr ~]# fdisk -l
和
[root@vultr ~]# df -h
结果显示如下图:
可以看到,Vultr VPS的硬盘只有一个,并且被挂载到根分区目录上(/)。硬盘大小是20G,比官宣的10G多了一倍。
因为没有数据硬盘,所以在对硬盘IOPS写测试后,系统文件就会被破坏,导致要重装且全盘格式化,因此在做VPS的磁盘IOPS测试前,要非常注意这一点,一定要先备份数据。磁盘IOPS的写测试,是不能写到系统盘里的;但用dd命令测磁盘IO,是没有问题的。在后面的硬盘IO测试里,将详细介绍这一点。
宝塔跑分
测试VPS基准性能,国内用户比较喜欢用宝塔跑分,我因此也首先装了宝塔面板来一次宝塔跑分,看看成绩怎样。有关宝塔面板安装和宝塔跑分的教程可参考这篇文章《Linux管理面板:宝塔安装和宝塔跑分详细教程》。
宝塔跑分是通过CPU测试和磁盘IO测试后使用固定的公式来计算得出分数的,我这台VPS的得分如下图所示:
6000多分,测了三次都差不多,三次平均分是6210分。这个分数被宝塔判为属于“性能一般”的等级。
而在VPS评测网(vps5u)所有测试的VPS中,排名如下chart图显示这样:
UnixBench跑分
相比宝塔跑分,UnixBench跑分更被广泛利用。
UnixBench是一个类unix(Unix,BSD,Linux)系统下的性能测试工具,一个开源工具,被广泛用于测试linux系统主机的性能。Unixbench的主要测试项目有:系统调用、读写、进程、图形化测试、2D、3D、管道、运算、C库等系统基准性能提供测试数据。
本次跑分使用2019年最新版本UnixBench5.1.3,运行30分钟左右,最后得分如图:
我一共进行了三次跑分测试,平均得分是885分,划分等级为一般。
而在VPS评测网(vps5u)所有测试的VPS中,排名如下chart图显示这样:
端口带宽
端口带宽(端口速率)是VPS基准性能测试的必测项目之一,端口带宽直接反映出VPS的速率快慢、流量上限。
测试VPS端口带宽可以用wget
命令,在VPS里下载一个大文件,看结果显示有多少速率。
国际端口带宽
常用来测试VPS国际端口带宽的命令是这个:
[root@vultr ~]# wget https://cachefly.cachefly.net/100mb.test
我们现在看看在Vultr VPS上的执行情况,结果显示如下图:
我测试了5、6次,速率在65MB/s-85MB/s之间,平均速率是75MB/s。
10MB/s是百兆带宽,而100MB/s是千兆带宽。一般带宽都跑不满,Vultr这个可以断定是千兆端口带宽(1Gbit/s),不过速率如果能达到80-90MB/s,就更好了。
在VPS评测网(vps5u)所有测试的VPS中,排名如下chart图显示这样:
上面的带宽测试,是wget
一个美国的文件,这个可视为VPS的国际端口带宽,由于网络的原因,wget
世界各地的文件,结果是不太一样的。使用下面的命令可以得到更多国际节点的访问速率:
[root@vultr ~]# wget -qO- bench.sh | bash
如下图所示:
从图中数据看到,第一行的72.6MB/s就是wget
美国的这个CacheFly文件,而最高的是第二行的149MB/s,这是因为wget
文件在日本东京(Tokyo, JP),我的这台VPS也是在日本,同一个地方的访问速率肯定是最快的。除了美国和日本,可以看到在其他地方的速率并不太理想,都不超过30MB/s,最低的只有2.52MB/s,平均速率是30MB/s。
在VPS评测网(vps5u)所有测试的VPS中,排名如下chart图显示这样:
国内节点带宽
一般来说,由于网络的原因,国内与国际相互访问的速度都差强人意,我们现在看看Vultr VPS在国内的访问速度情况。
使用下面命令可以得到VPSwget
国内节点文件的速率:
[root@vultr ~]# wget -qO- --no-check-certificate https://raw.githubusercontent.com/oooldking/script/master/superbench.sh | bash
得到结果如下图:
为了方便与国际端口带宽的测试数据作对比,上图我把单位转成了MB/s(1MB/s=8Mbit/s)。图中CT是中国电信,CU是中国联通,CM是中国移动。从数据来看,Vultr VPS对中国节点的访问速率相当不错,最快的长沙移动,速率竟然达到146MB/s,大部分速率都有30-50MB/s,平均速率是40MB/s,比它对国际节点的平均访问速率30MB/s快了30%,这完全在我的意料之外。从图上看到,国内测速节点用的是5G网络,这让我们对5G网络的普及充满憧憬!
在VPS评测网(vps5u)所有测试的VPS中,排名如下chart图显示这样:
说明:
图中 Download speed 是在VPS里下载外网文件的速度,而Upload Speed是在VPS里向外网上传文件的速度,很多人容易弄反这一点。
硬盘IO
IO是指输入/输出(Input/Output),硬盘IO就是指对字节的读取速度,即硬盘的读写能力。服务器硬盘IO的性能也是服务器硬件配置中需要考虑的问题,因此硬盘IO也是VPS基准性能指标之一,是VPS基准性能测试不可缺少的一项。
磁盘IO测试的关键点是:直接访问磁盘数据,而不经过内核缓冲区。可以使用工具来完成这个测试。本测试将用dd命令来测磁盘IO速度,用fio工具来测磁盘的IOPS(Input/Output Per Second)即每秒的输入输出量(读写次数)。
dd命令测磁盘IO
dd命令是测硬盘IO的读写速度,即每秒读写磁盘字节数,命令使用方法如下:
[root@vultr ~]# dd if=/dev/zero of=test bs=64k count=5000 oflag=dsync
解释:if是输入文件,of是输出文件,bs是每秒读写字节数,count是读写次数,oflag=dsync是同步进行,即是直接写入而不经过内存缓存,这是最真实的硬盘IO。
/dev/zero
是类Unix操作系统中的一个特殊文件,它提供从其中读取的尽可能多的空字符(ASCII NUL, 0x00),典型用途之一是提供用于初始化数据存储的字符流。
与/dev/null
不同,/dev/zero
可用作源,而不仅仅用作数据的接收器,对/dev/zero
的所有写操作均成功,没有其他影响,但是,/dev/null
更通常用于此目的。
执行结果如图:
78.6MB/s的硬盘IO,是一般的硬盘读写速度,不差,但也不算好,等级参考下表。
关于上面dd测试结果图中的328MB的计算公式:
64*5000/1024 = 312.5MiB = 312.5*1.05MB = 328MB
64k是64KiB,不是64KB,1KiB=1.05KB。
KiB、MiB也是容量单位,硬盘读写单位是KiB、MiB,1MiB=1.05MB
不过不用担心,对于很多用户使用的机械硬盘(非SSD硬盘)来说,这些硬盘IO速度会比这个低很多,甚至有的只有个位数。但这对网站访问的影响不会太大,因为实际的数据访问,并非这样一小块一小块地直接读写硬盘,而是充分利用了内核缓存机制,让文件访问速度得以N倍的提升。如下面这条命令,就是实际访问文件时的硬盘IO读写速度,它利用了内存先把读取的数据保存,再一次性写入硬盘里。
[root@vultr ~]# dd if=/dev/zero of=test bs=64k count=5000 conv=fdatasync
执行结果如图:
这个速度跟宝塔跑分的硬盘IO读写速度吻合。
尽管如此,我们在比较硬盘性能时,还是用第一条命令的数据:78.6MB/s,这个速度在VPS评测网(vps5u)所有测试的VPS里,排名如下chart图显示这样:
fio工具测硬盘IOPS
IOPS (Input/Output Per Second)即每秒的输入输出量(读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。
随机读写频繁的应用,如小文件存储(图片)、OLTP数据库、邮件服务器,关注随机读写性能,IOPS是关键衡量指标。
不像dd命令不用安装就能直接使用,fio工具需要安装才能使用,但安装也很简单,执行下面这条命令即可。
[root@vultr ~]# yum install libaio-devel fio
安装后,用下面命令,查看硬盘随机读写的IOPS。
[root@vultr ~]# fio -direct=1 -iodepth 1 -rw=randrw -ioengine=libaio -bs=4k -size=500m -numjobs=1 -runtime=30 -group_reporting -filename=/dev/vda1 -name=mytest --allow_mounted_write=1
注意!这条命令不是复制到任何VPS都能用的,要先用命令 df -h
查看硬盘是否有/dev/vda1
这个设备,你的VPS可能有/dev/sda2
这个设备,那么就用/dev/sda2
来代替/dev/vda1
。
警告!
这条命令可能会破坏系统文件,执行后要重装系统,全盘格式化!所以执行前务必先备份好你的全盘数据文件,包括数据库。
命令解释:
- -direct=1
表示直接写入硬盘,不经过内存 - -iodepth 1
队列深度。默认是1,可以通过设置大于1的数来提升并发度。 - -rw=randrw
测试随机写的I/O - -ioengine=libaio
I/O测试引擎。以异步非阻塞方式来读写文件 - -bs=4k
单次IO的块文件大小为4k - size=500m
本次测试文件大小为500m - -numjobs=1
线程数。本次的测试线程数为1 - -runtime=30
执行时间是30秒 - -group_reporting
显示结果汇总每个进程的信息 - -filename=/dev/vda1
要写入数据的设备,通常用data盘,用系统盘会破坏系统文件 - -name=mytest
任务名称,可随机命名,不可缺 - --allow_mounted_write=1
设置为1,允许对设备进行写入数据
执行结果如下图所示:
读的IOPS是3261,写的IOPS是3245,读的BW(吞吐量)是12.7MiB/s(13.4MB/s),写的BW(吞吐量)是12.7MiB/s(13.3MB/s)。这里要说一下单位MiB/s,它是一个容量单位,检查硬盘容量时是以MiB、GiB为单位,它与MB/s的转换公式是1 MiB/s = 1.05 MB/s 。
硬盘IOPS多少为好?3000多是什么水平?通过我的收集数据比较,在国内众多主机商中,对于机械硬盘来说,一般IOPS是100-300,SSD硬盘的IOPS在1000左右。而超过3000的IOPS是不多见的,放在国内可以称得上是优越级别。不过在VPS评测网(vps5u)所有测试的VPS里,排名如何呢?下面chart图告诉我们,排名数据是用总IOPS(读IOPS+写IOPS):
CPU压测
Super PI
常用的对CPU进行压测是通过计算圆周率让CPU高负荷运作,以达到考验CPU计算能力与稳定性的目的,通常用super_pi对CPU进行压测。
Super PI是计算圆周率小数点后n位所需要的时间,它是利用CPU的浮点运算能力来计算出圆周率π的。
使用Super PI要先下载安装包安装,安装也并不复杂,先后执行下面两条命令即可:
[root@vultr ~]# yum install glibc.i686
[root@vultr ~]# wget http://reistlin.com/download/linux/super_pi.tar.gz && tar -zxvf super_pi.tar.gz
然后执行如下命令就立即运行Super PI:
[root@vultr ~]# ./super_pi 20
看看我的测试结果,如图:
可以看到计算一共用了14.115秒。计算用时越少说明CPU的运算能力越强,14.115秒这个成绩怎样呢?我们可以通过下面chart图看看它在VPS评测网(vps5u)所有测试的VPS里的排名情况。
SysBench
SysBench是另一个被广泛使用的测试CPU基准性能的工具,它通过计算质数直到某个最大值所需要的时间,来测试CPU的运算性能。
SysBench需要安装,CentOS安装SysBench只需执行如下两行命令:
[root@vultr ~]# curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
[root@vultr ~]# sudo yum -y install sysbench
测试方法是执行一次这个命令:
[root@vultr ~]# sysbench cpu --cpu-max-prime=20000 --threads=1 run
解释:CPU对素数的计算,一直计到--cpu-max-primes
选项指定的值,这里是20000;--threads
是测试使用的线程数,这里是只用1个线程来跑。
测试默认时间是10秒钟,当然这个时间可以自己设定,使用参数如--time=30
,就是测试时间为30秒。
所以上面测试命令的意思是:10秒内用1个线程执行计算质数到最大值20000,看执行次数是多少。
测试结果如图:
图中显示,10秒钟内一共执行了2959次。我们将用这个结果,比较各测试方案的CPU性能。Vultr这一CPU在VPS评测网(vps5u)所有测试的VPS里的排名,如下chart图所示:
内存压测
计算机中所有程序的运行都是在内存中进行的,所以内存的性能对计算机的影响非常大,因此内存性能测试也是VPS基准性能测试项目之一。
内存压测主要是测试内存分配及传输速度,上面CPU压测使用的SysBench工具,也同样能完成内存压测的工作。
使用命令如下:
[root@vultr ~]# sysbench memory --threads=10 --memory-block-size=8k --memory-total-size=100G run
解释:这条语句是用10条线程,分配100G的内存总量,每个内存块的大小为8K。测试结果我们最关心的是吞吐量(传输速度)。上面语句的执行结果如图:
图中数据看到,吞吐量是84240.21MiB,传输速率是8421.45MiB/s。与磁盘IO的吞吐量相比,内存的读写比磁盘的读写要快几十倍。
关于吞吐量的单位问题:
这里我们看到单位是MiB,而不是MB。
KiB、MiB也是容量单位,硬盘、内存读写单位是KiB、MiB。
1KiB=1.05KB,1MiB=1.05MB
Vultr VPS这个内存性能如何?我们将用这个结果来比较各测试方案的内存性能。Vultr这个VPS的内存性能在VPS评测网(vps5u)所有测试的VPS里的排名,如下chart图所示:
总结
本文主要介绍了VPS的基准性能测试,通过本测试,我们可以对该VPS的硬件有了一定的了解。但对于我们用户来说,更关心的还是VPS的访问速度问题,由于篇幅有限,我在另一篇文章《Vultr VPS速度评测》专门介绍VPS的访问速度测试,包括:响应时间、稳定性、线路检测、全国测速、全球测速,最后还做了访问压力测试,从而进一步了解Vultr VPS。