6.sysbench安装
1.sysbench
sysbench是percon公司开发的一款软件,主要是针对系统和数据库压测是项目上线前必做的一项,这里使用的是最新版本的sysbench做的压测使用详解。sysbench可以做系统层面的压力测试(CPU、内存、硬盘IO、互斥锁、Thead),也可以做数据库(MySQL/Oracle/PG)层面的压力测试。安装容易,操作便捷,是压测使用的重要工具之一
2.安装sysbench(这里是基于二进制mysql包的安装,这里我的二进制mysql目录是安装在/application/mysql 目录下)
这里是直接从github上面进行下载
git clone https://github.com/akopytov/sysbench.git
下载完毕后然后再进行编译安装
./autogen.sh ---》执行这个命令生成configure文件 ,在生成configure文件之前这个命令会检查一下依赖包是否完整
编译之前这里可能需要先要提前安装一些依赖包
yum -y install automake
yum -y install libtool ----》缺少什么依赖包就要补啥依赖包
总体要安装的包:yum -y install autoconf automake mysql-devel libtool openssl-devel
./configure --prefix=/usr/local/sysbench --with-mysql=/application/mysql --with-mysql-includes=/application/mysql/include/ --with-mysql-libs=/application/mysql/lib ----》这一步很重要,如果后面什么都不加的话会默认安装的
make && make install
3.简单使用
sysbench 0.5版本或之前版本
-----准备阶段
sysbench --db-driver=mysql --mysql-user=root --mysql-password='123' \ --mysql-socket=/data/mysql/3307/mysql.sock --mysql-db=foo --range_size=100 \ --table_size=10000 --tables=2 --threads=1 --events=0 --time=60 \ --rand-type=uniform /usr/local/sysbench/share/sysbench/oltp_read_write.lua perpare
-------测试阶段 sysbench --db-driver=mysql --mysql-user=root --mysql-password='123' \ --mysql-socket=/data/mysql/3307/mysql.sock --mysql-db=foo --range_size=100 \ --table_size=10000 --tables=2 --threads=1 --events=0 --time=60 \ --rand-type=uniform /usr/local/sysbench/share/sysbench/oltp_read_write.lua run
-------清除阶段
sysbench --db-driver=mysql --mysql-user=root --mysql-password='123' \
--mysql-socket=/data/mysql/3307/mysql.sock --mysql-db=foo --range_size=100 \
--table_size=10000 --tables=2 --threads=1 --events=0 --time=60 \
--rand-type=uniform /usr/local/sysbench/share/sysbench/oltp_read_write.lua cleanup
4.sysbench 测磁盘io(sysbench 1.0版本之后)
sysbench fileio --file-num=20 --threads=20 --file-total-size=20G --events=1000000 --file-test-mode=rndrw prepare
sysbench fileio --file-num=20 --threads=20 --file-total-size=20G --events=1000000 --file-test-mode=rndrw run
sysbench fileio --file-num=20 --threads=20 --file-total-size=20G --events=1000000 --file-test-mode=rndrw cleanup
这里我对比了一下我的虚拟机(一个处理器内核,1G的内存)读性能为85MB/s 写性能为55MB/s ,而我的阿里云(单核1G内存)读性能23MB/s 写性能为15MB/s
5.测试cpu
常用参数: --cpu-max-prime: 素数生成数量的上限 - 若设置为3,则表示2、3、5(这样要计算1-5共5次) - 若设置为10,则表示2、3、5、7、11、13、17、19、23、29(这样要计算1-29共29次) - 默认值为10000 --threads: 线程数 - 若设置为1,则sysbench仅启动1个线程进行素数的计算 - 若设置为2,则sysbench会启动2个线程,同时分别进行素数的计算 - 默认值为1 --time: 运行时长,单位秒 - 若设置为5,则sysbench会在5秒内循环往复进行素数计算, 从输出结果可以看到在5秒内完成了几次, 比如配合--cpu-max-prime=3,则表示第一轮算得3个素数, 如果时间还有剩就再进行一轮素数计算,直到时间耗尽。 每完成一轮就叫一个event - 默认值为10 - 相同时间,比较的是谁完成的event多 --events: event上限次数 - 若设置为100,则表示当完成100次event后,即使时间还有剩,也停止运行 - 默认值为0,则表示不限event次数 - 相同event次数,比较的是谁用时更少
案例分析:
# 素数上限2万,默认10秒,2个线程 sysbench cpu --cpu-max-prime=20000 --threads=2 run
结果:
[root@node01 tmp]# sysbench cpu --cpu-max-prime=20000 --threads=2 run sysbench 1.1.0-bbee5d5 (using bundled LuaJIT 2.1.0-beta3) Running the test with following options: Number of threads: 2 //指定线程个数 Initializing random number generator from current time Prime numbers limit: 20000 //每个线程产生的素数上限均为2万个 Initializing worker threads... Threads started! CPU speed: events per second: 446.69 //所有线程每秒完成了446.69次event Throughput: events/s (eps): 446.6855 time elapsed: 10.0026s //共耗时10秒 total number of events: 4468 //在10秒内共完成了4468次event Latency (ms): min: 2.09 //完成1次event最少耗时2.09ms avg: 4.44 //完成所有events平均耗时4.44ms max: 24.57 //完成1次event最大耗时24.57毫秒 95th percentile: 13.22 //95%的events完成都在13.22ms完成 sum: 19842.20 //每个线程耗时10ms,2个线程总共耗时20ms Threads fairness: events (avg/stddev): 2234.0000/0.00 //平均每完成2234次event,标准差是0.00 execution time (avg/stddev): 9.9211/0.02 //每个线程平均耗时10秒,标准差为0.02
event:表示完成了几轮素数计算
stddev:标准差,在相同时间内,多个线程分别完成素数计算次数是否稳定,如果数值越低,那么多个线程的结果就越接近(即越稳定),该线程对单线程无意义。
分析:
如果有2台服务器进行CPU性能对比,当素数上限和线程数一致时:
相同时间,比较event
相同event,比较时间
时间和event都相同,比较stddev(标准差)
6.测oltp
sysbench --db-driver=mysql --mysql-user=root --mysql-password=123 --mysql-socket=/data/mysql/3307/mysql.sock --threads=20 --mysql-db=foo --table_size=10000 --tables=2 oltp_read_write.lua prepare //这个是准备数据
.......run //运行
.......clearup //清理数据
结果分析:
Threads started! SQL statistics: queries performed: read: 27356 write: 7816 other: 3908 total: 39080 transactions: 1954 (193.55 per sec.) //每秒处理的事务数TPS queries: 39080 (3870.99 per sec.) //每秒请求的次数QPS ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.) Throughput: events/s (eps): 193.5497 time elapsed: 10.0956s total number of events: 1954 Latency (ms): min: 5.20 avg: 102.95 max: 496.24 95th percentile: 137.35 sum: 201163.87 Threads fairness: events (avg/stddev): 97.7000/2.15 execution time (avg/stddev): 10.0582/0.02