YCSB压力测试工具安装

时间:2022-08-04 00:58:43

YCSB(Yahoo! Cloud System Benchmark)作为测试客户端工具。YCSB是Yahoo开源的一个nosql测试工具,用来测试比较各种nosql的性能。

YCSB支持常见的nosql数据库读写,如插入,修改,删除,读取等。它可以使用多线程来提高客户端的性能。可以方便的自定义各种场景,如95%插入5%读, 或者90%读5%更新5%插入等等。可以自定义数据请求分布方式:平均分布,zipfian(大约20%数据获得80%访问请求)。

1.下载地址

​https://github.com/brianfrankcooper/YCSB​

2.环境准备

jdk

maven

argparse

3.安装jdk

yum install jdk-8u65-linux-x64.rpm

4.安装maven

wget http://ftp.heanet.ie/mirrors/www.apache.org/dist/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz
tar xzf apache-maven-*-bin.tar.gz -C /usr/local
cd /usr/local
ln -s apache-maven-* maven
vim /etc/profile.d/maven.sh
export M2_HOME=/usr/local/maven
export PATH=$M2HOME/bin:$PATH

验证是否安装成功

bash
mvn -version

YCSB压力测试工具安装

5.安装argparse

yum install python-setuptools python-devel
easy_install pip
pip install argparse

6.安装YCSB

wget https://github.com/brianfrankcooper/YCSB/releases/download/0.12.0/ycsb-0.12.0.tar.gz
tar xfvz ycsb-0.12.0.tar.gz
mv ycsb-0.12.0 /usr/local/

7.运行YCSB

(1).YCSB目录结构

安装好YCSB之后,查看YCSB目录如下:

YCSB压力测试工具安装

主要目录及作用:

bin:目录下有个可执行的ycsb文件,是个python脚本,是用户操作的命令行接口。ycsb主逻辑是:解析命令行、设置java环境,
加载java-libs,封装成可以执行的java命令,并执行
workloads:目录下有各种workload的模板,可以基于workload模板进行个性化修改
core:包含ycsb里各种核心实现,比如DB的虚拟类DB.java,各个db子类都要继承该类;还有比如workload抽象类,
如果我们要自定义workload实现也需要继承该类

各种DB的目录:比如mongo,redis等,里面包含了对应测试的源码等,当ycsb mvn编译后,会在对应的目录下生成target文件,ycsb会加载对应target文件中的class类。

(2).mongodb参数
-P file        Specify workload file // workload文件 用于设置一些对应的参数,如果workload中的参数,也可以以-p的方式放在命令行中设置
-cp path Additional Java classpath entries
-jvm-args args Additional arguments to the JVM
-p key=value Override workload property // 一些设置
-s Print status to stderr // 把状态达到stderr中
在运行中,把一些状态打印到stderr中,一般status信息,用于表示在运行中的一些中间状态(比如当前处理了多少请求,还有多少请求等)
-target n Target ops/sec (default: unthrottled) // 每秒总共操作的次数
表示1s中总共的操作次数(各个线程加起来的),如果性能不满足,比如最高性能只有100,你设置了1000,那么ycsb会尽量往这个数目去靠近。默认是不做限制
-threads n Number of client threads (default: 1) // 客户端线程数
设置ycsb client的并发测试线程数,默认是1,单线程,所以再测试的时候,一定要设置这个选项
(3).-P workload文件 基础配置:
recordcount=1000     # 总共的操作条数
operationcount=1000 # 总共操作的次数
workload=com.yahoo.ycsb.workloads.CoreWorkload=
readallfields=true # 在读取的时候,是否需要读取所有字段
readproportion=0.5 # 读取比例
updateproportion=0.5 # update比例
scanproportion=0
insertproportion=0
requestdistribution=zipfian
mongodb.url=mongodb://10.2.10.167:27017/ycsb? # mongodb对应的uri等
mongodb.database=ycsb # 对应的db
mongodb.writeConcern=0# 写级别
(4).YCSB的运行分为两个阶段:测试数据加载阶段和测试操作执行阶段,每个阶段又可以分同步与异步

该阶段主要用于构造测试数据,ycsb会基于参数设定,往db里面构造测试需要的数据(目前是关闭了mongodb的authorization进行测试的)

./bin/ycsb load mongodb -s -P workloads/workloada -p mongodb.url=mongodb://10.2.10.167:27017/ycsb?w=0 > outputLoad.txt

YCSB压力测试工具安装

加载结束后可以看到类似于如下输出:

YCSB压力测试工具安装

执行阶段

./bin/ycsb run mongodb -s -P workloads/workloada -p mongodb.url=mongodb://10.2.10.167:27017/ycsb?w=0 > outputRun.txt

YCSB压力测试工具安装

运行结束后可以看到类似于如下输出: 

mongo client connection created with mongodb://10.2.10.167:27017/ycsb?w=0
[OVERALL], RunTime(ms), 1897.0 #执行时间
[OVERALL], Throughput(ops/sec), 527.1481286241434 #每秒操作数,吞吐量
[TOTAL_GCS_Copy], Count, 7.0
[TOTAL_GC_TIME_Copy], Time(ms), 23.0
[TOTAL_GC_TIME_%_Copy], Time(%), 1.2124406958355298
[TOTAL_GCS_MarkSweepCompact], Count, 0.0
[TOTAL_GC_TIME_MarkSweepCompact], Time(ms), 0.0
[TOTAL_GC_TIME_%_MarkSweepCompact], Time(%), 0.0
[TOTAL_GCs], Count, 7.0
[TOTAL_GC_TIME], Time(ms), 23.0
[TOTAL_GC_TIME_%], Time(%), 1.2124406958355298
[READ], Operations, 512.0 #操作数
[READ], AverageLatency(us), 1282.00390625 #平均操作时间
[READ], MinLatency(us), 164.0 #最小操作时间
[READ], MaxLatency(us), 94847.0 #最大操作时间
[READ], 95thPercentileLatency(us), 3857.0 #95%操作时间
[READ], 99thPercentileLatency(us), 6327.0 #99%操作时间
[READ], Return=OK, 512 #操作成功数
[CLEANUP], Operations, 1.0
[CLEANUP], AverageLatency(us), 6066.0
[CLEANUP], MinLatency(us), 6064.0
[CLEANUP], MaxLatency(us), 6067.0
[CLEANUP], 95thPercentileLatency(us), 6067.0
[CLEANUP], 99thPercentileLatency(us), 6067.0
[UPDATE], Operations, 488.0
[UPDATE], AverageLatency(us), 963.094262295082
[UPDATE], MinLatency(us), 165.0
[UPDATE], MaxLatency(us), 20431.0
[UPDATE], 95thPercentileLatency(us), 3787.0
[UPDATE], 99thPercentileLatency(us), 6035.0
[UPDATE], Return=OK, 488