什么是benchmark test

benchmark trest是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。

例如我们测试redis数据库,我们要通过设置一定的并发量,然后每个并发有多少个请求,然后再针对redis每个命令例如:set/get/incr/lpush等命令进行测试。通过这样的测试下来,我们可以对当前数据库的状态有一个基本的了解。

为什么做要benchmark test

1)首次安装

例如我们要使用redis数据库,我们要知道它在我们服务器上运行的状态是否能达到我们想要的需求。

2)验证修改

当我们修改了某个参数后,如果该参数可能对性能有影响,我们可以在修改之前执行一次benchmarktest,然后修改参数,再次执行benchmarktest,然后对比两次的结果,看对性能有好的优化,还是负面效果。

如何开展benchmark test

 

准备工作:首先我们要将必须的实验环境准备好。例如 redis测试。我们要准备好服务器,然后安装并配置好数据库,然后确保数据库在运行状态。

进行测试:当准备工作做好之后,我们要开始我们的测试。通过测试工具我们执行相应的测试命令。这样就可以完成测试。

重复测试:需要注意的是,benchmarktest一般都要做两次以上,为了防止其他应用对我们测试的影响,我们要进行二次验证。

总结结果:当我们执行两次或以上benchamark之后,我们要对测试的结果进行整理,然后进行对比总结出我们的测试结果。最后对测试的结果进行留底存放,用来后面进行对比。

 redis benchmark 介绍

redis的benchmark是当我们安装完redis之后官方自带的一个测试组件redis-benchmark,通过这个组件,我们可以针对redis制定相应的测试。

redis-benchmark 语法介绍:

[root@node1 bin]# redis-benchmark --help
Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]

 -h <hostname>          指定redis测试服务器
 -p <port>              指定redis服务的端口
 -s <socket>            指定redis socket文件
 -a <password>          指定redis密码
 -c <clients>           指定测试的并行数
 -n <requests>          指定测试的请求数量
 -d <size>              SET/GET 命令的值bytes单位 默认是2
 --dbnum <db>           指定redis的某个数据库,默认是0数据库
 -k <boolean>           指定是否保持连接 1是保持连接 0是重新连接,默认为 1
 -r <keyspacelen>       指定get/set的随机值的范围。-P <numreq>            管道请求测试,默认0没有管道测试
 -e                     如果有错误,输出到标准输出上。
 -q                     静默模式,只显示query/秒的值
 --csv                  指定输出结果到csv文件中
 -l                     指定是否一直运行test
 -t <tests>             指定需要测试的命令,以逗号分隔,

 

测试实验:

Run the benchmark with the default configuration against 127.0.0.1:6379:
   $ redis-benchmark

 Use 20 parallel clients, for a total of 100k requests, against 192.168.1.1:
   $ redis-benchmark -h 192.168.1.1 -p 6379 -n 100000 -c 20

 Fill 127.0.0.1:6379 with about 1 million keys only using the SET test:
   $ redis-benchmark -t set -n 1000000 -r 100000000

 Benchmark 127.0.0.1:6379 for a few commands producing CSV output:
   $ redis-benchmark -t ping,set,get -n 100000 --csv

 Benchmark a specific command line:
   $ redis-benchmark -r 10000 -n 10000 eval 'return redis.call("ping")' 0

 Fill a list with 10000 random elements:
   $ redis-benchmark -r 10000 -n 10000 lpush mylist __rand_int__

 

结果分析:

./redis-benchmark -h 127.0.0.1 -p 6379 -c 20 -n 100000 -t get

Summary:
  throughput summary: 57012.54 requests per second                       吞吐量总结
  latency summary (msec):                                                各维度总结
          avg       min       p50       p95       p99       max
        0.255     0.096     0.199     0.407     1.047   101.631
====== GET ======                                                        测试的命令
  100000 requests completed in 1.68 seconds                              完成时间
  20 parallel clients                                                    并行数量
  3 bytes payload                                                        每个set指定多少个bytes
  keep alive: 1                                                          是否keepalive
  host configuration "save": 3600 1 300 100 60 10000 
  host configuration "appendonly": no
  multi-thread: no                                                       是否多线程