一.介绍
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自带了如下的压测脚本
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获取。
没有评论:
发表评论