sysbench 是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。
github 下载:https://github.com/akopytov/sysbench/releases
wiki 文档:https://wiki.mikejung.biz/Sysbench
安装部署:
yum -y install make automake libtool pkgconfig libaio-devel
wget https://github.com/akopytov/sysbench/archive/1.0.15.tar.gz
tar -zxf 1.0.15.tar.gz
cd sysbench-1.0.15
./autogen.sh
./configure --prefix=/usr/local/sysbench
make && make install
/usr/local/sysbench/bin/sysbench --version
ln -s /usr/local/sysbench/bin/sysbench /usr/bin/sysbench
【 常规选项 】
--threads=N 使用的线程数[1]
--events=N 最大事件数 [0]
--time=N 最大执行时间(秒) [10]
--forced-shutdown=STRING 到达 --time 秒后,强制关闭前等待的秒数 [off]
--thread-stack-size=SIZE 每个线程的堆栈大小 [64K]
--rate=N 平均传输速率(0表示无限制) [0]
--report-interval=N 以秒为单位定期报告具有指定间隔的中间统计信息(0:禁用中间报告)[0]
--report-checkpoints=[LIST,...] 转储完整的统计信息并及时重置所有计数器.该参数是以逗号分隔的值的列表,
表示从测试开始到必须执行报表检查点的时间(以秒为单位).默认关闭
--debug[=on|off] 打印更多 debug 信息 [off]
--validate[=on|off] 尽可能执行验证检查 [off]
--help[=on|off] 打印帮助信息并退 [off]
--version[=on|off] 打印版本信息并退出[off]
--config-file=FILENAME 包含命令行选项的文件
--tx-rate=N 已废弃改为 --rate [0]
--max-requests=N 已废弃改为 --events [0]
--max-time=N 已废弃改为 --time [0]
--num-threads=N 已废弃改为 --threads [1]
其他专有选项:
【 CPU 选项 】
--cpu-max-prime=N 质素最高限制(质素计算用于测试CPU运算能力) [10000]
【 Thread 选项 】
--thread-yields=N 每个线程请求切换的次数[1000]
--thread-locks=N 每个线程产生的锁数量 [8]
【 Memory 选项 】
--memory-block-size=SIZE 测试的内存块大小(参考磁盘、数据库 的块、页 大小) [1K]
--memory-total-size=SIZE 传输数据的大小(参考物理内存、逻辑内存划分3个值) [100G]
--memory-scope=STRING 内存访问范围 {global 容量大传输慢,local} [global]
--memory-hugetlb[=on|off] 从 HugeTLB 池分配内存 [off]
--memory-oper=STRING 内存操作类型 {read, write, none} [write]
--memory-access-mode=STRING 内存访问模式 {seq 顺序,rnd 随机} [seq]
【 Mutex 选项 】
--mutex-num=N mutex 数组的总大小 [4096]
--mutex-locks=N 每个线程产生的 mutex 数量 [50000]
--mutex-loops=N 外部 mutex 锁产生的空循环数量 [10000]
【 Disk 选项 】
# 文件大小参考内存大小设置,如果内存为 32GB ,测试的文件大小需要大于 32GB,这样内存不足则使用到磁盘逻辑内存。
--file-num=N 创建的文件数量 [128]
--file-block-size=N IO操作的块大小(随机IO建议4K,序列IO建议1M) [16384]
--file-total-size=SIZE 创建的文件总大小(建议2倍物理内存大小) [2G]
--file-test-mode=STRING 测试模式 {seqrd 顺序读,seqwr 顺序写,seqrewr 顺序读写,rndrd 随机读,rndwr 随机写,rndrw 随机读写}
--file-io-mode=STRING 文件IO模式 {sync 同步,async 异步,mmap 内存映射文件} [sync]
--file-async-backlog=N 每个线程发送到队列中的异步操作数量 [128]
--file-extra-flags=[LIST,...] 额外的标识用于打开文件{sync,dsync,direct} []
--file-fsync-freq=N N个请求之后执行 fsync() (0:表示不使用 fsync()) [100]
--file-fsync-all[=on|off] 每完成一次写操作后执行 fsync() [off]
--file-fsync-end[=on|off] 测试完成后执行 fsync() [on]
--file-fsync-mode=STRING 同步方法 {fsync, fdatasync} [fsync]
--file-merged-requests=N 合并的最大IO请求数 (0:表示不合并) [0]
--file-rw-ratio=N 读写比例 [1.5]
【 MySQL 选项 】
--mysql-host=[LIST,...] MySQL server host [localhost]
--mysql-port=[LIST,...] MySQL server port [3306]
--mysql-socket=[LIST,...] MySQL socket
--mysql-user=STRING MySQL user [sbtest]
--mysql-password=STRING MySQL password []
--mysql-db=STRING MySQL database name [sbtest]
--mysql-ssl[=on|off] 客户端使用 SSL 连接[off]
--mysql-ssl-cipher=STRING 对 SSL 连接使用特定密码[]
--mysql-compression[=on|off] 客户端使用 compression [off]
--mysql-debug[=on|off] 跟踪所有客户端库调用 [off]
--mysql-ignore-errors=[LIST,...] 忽略 MySQL 报错 [all,1213,1020,1205……]
--mysql-dry-run[=on|off] 伪装所有 MySQL 客户端 API 成功调用且不执行[off]
测试示例,以下测试值主要使用默认值
【 CPU 测试 】
sysbench cpu --threads=1 --cpu-max-prime=10000 run
for each in 1 2 4 8 16 32 64; do sysbench cpu --threads=$each --cpu-max-prime=10000 run; done
【 Thread 选项 】
sysbench threads --threads=32 --thread-yields=1000 --thread-locks=8 run
for each in 2 4 8 16 32 64; do sysbench threads --threads=$each --thread-yields=1000 --thread-locks=8 run; done
【 Memory 测试 】
sysbench memory --memory-block-size=16K --memory-total-size=100G --memory-access-mode=seq --memory-oper=write run
【 Mutex 测试 】
sysbench mutex --threads=4 --mutex-num=4096 --mutex-locks=50000 --mutex-loops=10000 run
for each in 2 4 8 16 32 64; do sysbench threads --threads=$each --mutex-num=4096 --mutex-locks=50000 --mutex-loops=10000 run; done
【 Disk Tests 】三个步骤:prepare(准备阶段生成文件)、 run(执行测试)、 cleanup(清除测试文件)
sysbench fileio --file-num=100 --file-total-size=2G prepare
sysbench fileio \
--time=240 \
--threads=4 \
--file-num=100 \
--file-total-size=2G \
--file-block-size=16K \
--file-test-mode=rndrw \
--file-io-mode=sync \
--file-async-backlog=128 \
--file-extra-flags= \
--file-fsync-freq=100 \
--file-fsync-all=off \
--file-fsync-end=on \
--file-fsync-mode=fsync \
--file-merged-requests=0 \
--file-rw-ratio=1.5 run
sysbench fileio cleanup
【 MySQL Tests 】
# MySQL 创建相关信息
CREATE DATABASE sysbench;
CREATE USER 'sysbench'@'localhost' IDENTIFIED BY 'sysbench';
GRANT ALL PRIVILEGES ON sysbench.* TO 'sysbench'@'localhost';
# lua 脚本在以下目录中
cd /usr/local/sysbench/share/sysbench/
# 同样也需要3个步骤:prepare、run、cleanup
sysbench oltp_read_only.lua \
--db-driver=mysql \
--mysql-host=localhost \
--mysql-port=3306 \
--mysql-socket=/tmp/mysql3306.sock \
--mysql-db=sysbench \
--mysql-user=sysbench \
--mysql-password=sysbench \
--tables=10 \
--table-size=1000 \
--time=120 \
--threads=2 \
--max-requests=0 \
--report-interval=10 [prepare/run/cleanup]