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、35(这样要计算1-5共5次)
- 若设置为10,则表示2、357111317192329(这样要计算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
原文地址:https://www.cnblogs.com/zmc60/p/14243707.html