2018年3月15日星期四

sysbench 1.0用法探索

一.介绍

sysbench很久用过之前0.4的版本,目前已经正式到1.0版本,用法也有了变化,探索一下sysbench的使用场景,方便后续使用。

官方介绍 https://github.com/akopytov/sysbench, sysbench是一个模块化,跨平台,多线程的基准测试工具。


二.用法

sysbench [options]... [testname] [command] 
    testname可以是可选的内置测试,如fileio, memory, cpu等,或者指定lua脚本名。如果不指定testname command,或者testname为-,则sysbench期望标准输入一个Lua脚本。

sysbench自带了如下的压测脚本

  • oltp_*.lua
    • 位于src/lua下
  • fileio 测试IO能力,顺序读写,随机读写,混合读写等,可以指定文件数,block大小等
  • cpu 可以方便的用来测试cpu。
  • memory
  • threads  基于线程的调度压测
  • mutex  POSIX mutex压测工具
command包括

  • prepare  准备阶段,例如要测试fileio先准备一个大文件,或者要压测DB要先初始化表
  • run         运行testname
  • cleanup  清理阶段,收尾
  • help 查询testname下的参数情况
options sysbench --help展示可用的选项。
常用options说明:

  • --threads 并发线程数,默认1
  • --events  请求总数限制,默认0,不限制
  • --time      执行时间限制,默认0,不限制
  • --warmup-time  预热时间,期间不做统计,这样排除统计开始时的一个时间段。在测试CPU/DB等时,由于缓存预热等原因,开始部分的统计数据往往不准。
  • --rate       平均每秒请求量。默认0,不限制,即越快越好
  • --thread-stack-size  每个线程的栈大小,默认32k
  • --report-interval  间隔地汇报中间状态的统计,默认0,不输出中间结果
  • --validate            验证测试结果有效性
  • --verbosity         信息详细程度,0只有关键信息,5包含debug,默认4.
  • --percentile        除了统计min,avg,max以外,还会统计一个百分比A,去除(100%-A%)之后的耗时request后得到的最大值。默认为95,即去掉5%的大耗时之后的最大耗时,可以将此认为性能指标的合理上限。
  • --luajit-cmd        执行一个LuaJT控制命令,等价于luajit -T 

三.示例

安装流程,这里下载源码编译安装。下载地址: https://github.com/akopytov/sysbench/archive/master.zip
#unzip sysbench-master.zip
#cd sysbench-master 
#./autogen.sh
#./configure
#make
#make install
#sysbench --version
sysbench 1.1.0

示例使用公共选项均为:
PARAMS="--time=600 --warmup-time=60 --report-interval=10 --threads=16"

IO测试-fileio
文件准备
#sysbench --file-num=1 --file-block-size=16384 --file-total-size=50G --file-extra-flags=direct ${PARAM} fileio prepare
测试
#sysbench --file-num=1 --file-block-size=16384 --file-total-size=50G --file-extra-flags=direct --file-test-mode=seqwr ${PARAM} fileio run | tee 1_seqwr.log
清理
#sysbench --file-num=1 --file-block-size=16384 --file-total-size=50G --file-extra-flags=direct ${PARAM} fileio cleanup


压测MySQL
1)准备库和权限:
目标库上创建库和用户:
create database sysbench;grant all on sysbench.* to sysbench identified by 'sysbench123';

2)针对目标库,准备数据
cd /data/bak/sysbench/src/lua/sysbench --db-driver=mysql  --mysql-host={TARGET_IP}  --mysql-port=${TARGET_PORT}  --mysql-user=sysbench  --mysql-password=sysbench123 --mysql-db=sysbench --tables=10 --table_size=10000000  oltp_read_write.lua prepare

3)运行
在压测发起机器上
cd sysbench/src/luasysbench ${PARAM} --db-driver=mysql  --mysql-host=$TARGET_IP  --mysql-port=$TARGET_PORT  --mysql-user=sysbench  --mysql-password=sysbench123 --mysql-db=sysbench --tables=10 --table_size=10000000 oltp_read_write.lua run  | tee ${TARGET_IP}_${TARGET_PORT}_rw_16.log
可以调整threads, 调整testname,进行不同并发不同类型的压测。
然后分析日志即可。

4)清理步骤略,也是cleanup

测试CPU
#sysbench --cpu-max-prime=10000 ${PARAM} cpu run[ 10s ] thds: 16 eps: 13262.92 lat (ms,95%): 1.21[ 20s ] thds: 16 eps: 13273.30 lat (ms,95%): 1.21[ 30s ] thds: 16 eps: 13274.22 lat (ms,95%): 1.21[ 40s ] thds: 16 eps: 13273.78 lat (ms,95%): 1.21[ 50s ] thds: 16 eps: 13275.50 lat (ms,95%): 1.21
测试内存
#sysbench ${PARAM} memory run...Threads started!
Operations performed: 25609721 (2560957.78 ops/sec)
25009.49 MiB transferred (2500.94 MiB/sec)

General statistics:    total time:                          10.0001s    total number of events:              25609721...

测试mutex
# sysbench ${PARAM} --mutex-locks=50000000 mutex  runGeneral statistics:    total time:                          3.5056s    total number of events:              1
Latency (ms):         min:                               3504.85         avg:                               3504.85         max:                               3504.85         95th percentile:                   3511.19         sum:                               3504.85

测试threads
#sysbench ${PARAM} threads runGeneral statistics:    total time:                          10.0002s    total number of events:              37950
Latency (ms):         min:                                  0.24         avg:                                  0.26         max:                                  0.57         95th percentile:                      0.39         sum:                               9980.21
Threads fairness:    events (avg/stddev):           37950.0000/0.00    execution time (avg/stddev):   9.9802/0.00


更多sysbench用法,见sysbench help获取。

没有评论:

发表评论