sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL/Drizzle,它主要包括以下几种方式的测试:

  • cpu性能
  • 磁盘io性能
  • 调度程序性能
  • 内存分配及传输速度
  • POSIX线程性能
  • 数据库性能(OLTP基准测试)

机器配置

  1. [root@localhost ~]# grep -iE 'MemTotal|MemFree' /proc/meminfo
  2. MemTotal: 8058060 kB
  3. MemFree: 2213240 kB
  4. [root@localhost ~]# grep "processor" /proc/cpuinfo | wc -l
  5. 4
  6. [root@localhost ~]# uname -a
  7. Linux localhost 2.6.32-431.11.2.el6.x86_64 #1 SMP Tue Mar 25 19:59:55 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
  8. [root@localhost ~]# cat /etc/redhat-release
  9. CentOS release 6.7 (Final)

一、安装

官方地址:https://github.com/akopytov/sysbench

下载方法:git clone https://github.com/akopytov/sysbench.git

安装

  1. ./autogen.sh
  2. ./configure
  3. make && make install

以上命令的编译SysBench默认需要Mysql库的支持,如果你机器已安装Mysql但没有指定位置(在PATH下找不到mysql_config),你必须在./configure得时候指定–with-mysql-includes和–with-mysql-libs

也可以使用–without-mysql命令,取消Mysql的支持

command命令的简单描述及作用

  1. prepare:为测试执行准备工作,例如为fileis测试在磁盘上创建必要的文件,为OLTP测试准备测试数据
  2. run: 执行完整的测试,必须指定–-test选项
  3. cleanup: 在测试运行结束移除prepare准备的临时数据
  4. help:显示不同测试(根据–-test选项)的帮助信息,你也可以使用sysbench help命令(而不用–-test)去显示帮助信息

一些参数的解释

  1. --num-threads #创建测试线程的数目
  2. --max-requests #请求的最大数目,0表示不限制
  3. --max-time #最大执行时间,单位秒,0表示不限制
  4. --thread-stack-size #每个线程的堆栈大小 32K
  5. --init-rng #在测试开始之前指定是否需要初始化随机数发生器 off
  6. --report-interval #隔多久打印一次统计信息,注意的是统计信息统计的是间隔时间而不是累计时间的数据。单位秒,0表示关闭该功能
  7. --test #指定测试项目名称 Required
  8. --debug #是否显示更多的调试信息 off
  9. --validate #在可能的情况下是否进行验证检查 off
  10. --help #帮助信息 off
  11. --verbosity #详细级别,0-严重信息,5-调试信息
  12. --percentile #表示设定采样比例,默认是 95%,即丢弃1%的长请求,在剩余的99%里取最大值

二、CPU的基准测试

CPU测试使用64位整数,测试计算质数直到某个最大值所需要的时间,cpu测试主要是进行素数的加法运算,在上面的例子中,指定了最大的素数为 20000,自己可以根据机器cpu的性能来适当调整数值,主要看total time所花费的时间

  1. [root@localhost sysbench]# sysbench --test=cpu --cpu-max-prime=10000 run
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3.  
  4. Running the test with following options:
  5. Number of threads: 1
  6. Random number generator seed is 0 and will be ignored
  7.  
  8. Primer numbers limit: 10000
  9.  
  10. Threads started!
  11.  
  12. General statistics:
  13. total time: 14.5690s
  14. total number of events: 10000
  15. total time taken by event execution: 14.5616s
  16. response time:
  17. min: 1.40ms
  18. avg: 1.46ms
  19. max: 10.59ms
  20. approx. 95 percentile: 1.52ms
  21.  
  22. Threads fairness:
  23. events (avg/stddev): 10000.0000/0.00
  24. execution time (avg/stddev): 14.5616/0.00

相关选项

  1. sysbench test=cpu help
  2. --cpu-max-prime=N 最大质数发生器数量。默认是10000

三、线程基准测试

thread-locks小于线程数除以2,lock越少,处理时间越长

  1. [root@localhost sysbench]# sysbench --test=threads --num-threads=800 --thread-yields=100 --thread-locks=10 run
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3.  
  4. Running the test with following options:
  5. Number of threads: 800
  6. Random number generator seed is 0 and will be ignored
  7.  
  8. Threads started!
  9.  
  10. General statistics:
  11. total time: 0.4644s
  12. total number of events: 10000
  13. total time taken by event execution: 350.9839s
  14. response time:
  15. min: 0.04ms
  16. avg: 35.10ms
  17. max: 456.96ms
  18. approx. 95 percentile: 144.17ms
  19.  
  20. Threads fairness:
  21. events (avg/stddev): 12.5000/6.45
  22. execution time (avg/stddev): 0.4387/0.01

相关参数

  1. sysbench --test=threads help
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3.  
  4. threads options:
  5. --thread-yields=N 每个请求产生多少个线程。默认是1000
  6. --thread-locks=N 每个线程的锁的数量。默认是8

四、文件IO基准测试

磁盘IO性能测试[主要看每秒请求数(request)和总体的吞吐量(total)

  1. [root@localhost sysbench]# sysbench --test=fileio --num-threads=16 --file-total-size=2G --file-test-mode=rndrw prepare
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3.  
  4. 128 files, 16384Kb each, 2048Mb total
  5. Creating files for the test...
  6. Extra file open flags: 0
  7. Creating file test_file.0
  8. Creating file test_file.1
  9. ……
  10. Creating file test_file.127
  11. 2147483648 bytes written in 67.56 seconds (30.32 MB/sec).
  12. [root@localhost sysbench]# sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw run
  13. sysbench 0.5: multi-threaded system evaluation benchmark
  14.  
  15. Running the test with following options:
  16. Number of threads: 20
  17. Random number generator seed is 0 and will be ignored
  18.  
  19. Extra file open flags: 0
  20. 128 files, 16Mb each
  21. 2Gb total file size
  22. Block size 16Kb
  23. Number of IO requests: 10000
  24. Read/Write ratio for combined random IO test: 1.50
  25. Periodic FSYNC enabled, calling fsync() each 100 requests.
  26. Calling fsync() at the end of test, Enabled.
  27. Using synchronous I/O mode
  28. Doing random r/w test
  29. Threads started!
  30.  
  31. Operations performed: 5999 reads, 4001 writes, 12800 Other = 22800 Total
  32. Read 93.734Mb Written 62.516Mb Total transferred 156.25Mb (19.3Mb/sec)
  33. 1235.21 Requests/sec executed
  34.  
  35. General statistics:
  36. total time: 8.0958s
  37. total number of events: 10000
  38. total time taken by event execution: 1.4557s
  39. response time:
  40. min: 0.00ms
  41. avg: 0.15ms
  42. max: 1319.03ms
  43. approx. 95 percentile: 0.02ms
  44.  
  45. Threads fairness:
  46. events (avg/stddev): 500.0000/186.14
  47. execution time (avg/stddev): 0.0728/0.29

相关参数

  1. sysbench --test=fileio help
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3.  
  4. fileio options:
  5. --file-num=N 创建测试文件的数量。默认是128
  6. --file-block-size=N 测试时文件块的大小。默认是16384(16K)
  7. --file-total-size=SIZE 测试文件的总大小。默认是2G
  8. --file-test-mode=STRING 文件测试模式{seqwr(顺序写), seqrewr(顺序读写), seqrd(顺序读), rndrd(随机读), rndwr(随机写), rndrw(随机读写)}
  9. --file-io-mode=STRING 文件操作模式{sync(同步),async(异步),fastmmap(快速map映射),slowmmap(慢map映射)}。默认是sync
  10. --file-extra-flags=STRING 使用额外的标志来打开文件{sync,dsync,direct} 。默认为空
  11. --file-fsync-freq=N 执行fsync()的频率。(0 不使用fsync())。默认是100
  12. --file-fsync-all=[on|off] 每执行完一次写操作就执行一次fsync。默认是off
  13. --file-fsync-end=[on|off] 在测试结束时才执行fsync。默认是on
  14. --file-fsync-mode=STRING 使用哪种方法进行同步{fsync, fdatasync}。默认是fsync
  15. --file-merged-requests=N 如果可以,合并最多的IO请求数(0 表示不合并)。默认是0
  16. --file-rw-ratio=N 测试时的读写比例。默认是1.5

五、内存基准测试

测试了内存的连续读写性能

  1. [root@localhost sysbench]# sysbench --test=memory --memory-block-size=8k --memory-total-size=1G run
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3.  
  4. Running the test with following options:
  5. Number of threads: 1
  6. Random number generator seed is 0 and will be ignored
  7.  
  8. Threads started!
  9.  
  10. Operations performed: 131072 (769179.70 ops/sec)
  11.  
  12. 1024.00 MB transferred (6009.22 MB/sec)
  13.  
  14. General statistics:
  15. total time: 0.1704s
  16. total number of events: 131072
  17. total time taken by event execution: 0.1387s
  18. response time:
  19. min: 0.00ms
  20. avg: 0.00ms
  21. max: 2.12ms
  22. approx. 95 percentile: 0.00ms
  23.  
  24. Threads fairness:
  25. events (avg/stddev): 131072.0000/0.00
  26. execution time (avg/stddev): 0.1387/0.00

相关参数

  1. sysbench --test=memory help
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3.  
  4. memory options:
  5. --memory-block-size=SIZE 测试时内存块大小。默认是1K
  6. --memory-total-size=SIZE 传输数据的总大小。默认是100G
  7. --memory-scope=STRING 内存访问范围{global,local}。默认是global
  8. --memory-hugetlb=[on|off] HugeTLB池内存分配。默认是off
  9. --memory-oper=STRING 内存操作类型。{read, write, none} 默认是write
  10. --memory-access-mode=STRING 存储器存取方式{seq,rnd} 默认是seq 

六、互斥锁基准测试

  1. [root@localhost sysbench]# sysbench --test=mutex --num-threads=100 --mutex-num=1000 --mutex-locks=100000 --mutex-loops=10000 run
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3.  
  4. Running the test with following options:
  5. Number of threads: 100
  6. Random number generator seed is 0 and will be ignored
  7.  
  8. Threads started!
  9.  
  10. General statistics:
  11. total time: 4.9822s
  12. total number of events: 100
  13. total time taken by event execution: 474.6478s
  14. response time:
  15. min: 1601.28ms
  16. avg: 4746.48ms
  17. max: 4981.76ms
  18. approx. 95 percentile: 4973.56ms
  19.  
  20. Threads fairness:
  21. events (avg/stddev): 1.0000/0.00
  22. execution time (avg/stddev): 4.7465/0.40

相关参数

  1. sysbench --test=mutex help
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3.  
  4. mutex options:
  5.  
  6. --mutex-num=N 数组互斥的总大小。默认是4096
  7. --mutex-locks=N 每个线程互斥锁的数量。默认是50000
  8. --mutex-loops=N 内部互斥锁的空循环数量。默认是10000 

七、OLTP基准测试

完整过程分为3个阶段:prepare->run->cleanup,即分别为准备数据,测试,清理测试数据

  1. [root@localhost sysbench]# sysbench --mysql-socket=/var/lib/mysql/mysql.sock --oltp-table-size=100000 --test=sysbench/tests/db/oltp.lua --mysql-user=root --mysql-password=123456 --report-interval=5 --num-threads=100 --oltp_tables_count=10 --rand-type=uniform --percentile=99 run
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3.  
  4. Running the test with following options:
  5. Number of threads: 100
  6. Report intermediate results every 5 second(s)
  7. Random number generator seed is 0 and will be ignored
  8.  
  9. Threads started!
  10.  
  11. [ 5s] threads: 100, tps: 894.57, reads/s: 12790.38, writes/s: 3646.48, response time: 340.91ms (99%)
  12. [ 10s] threads: 100, tps: 973.20, reads/s: 13608.42, writes/s: 3860.61, response time: 238.96ms (99%)
  13. OLTP test statistics:
  14. queries performed:
  15. read: 140000
  16. write: 40000
  17. other: 20000
  18. total: 200000
  19. transactions: 10000 (932.07 per sec.)
  20. deadlocks: 0 (0.00 per sec.)
  21. read/write requests: 180000 (16777.18 per sec.)
  22. other operations: 20000 (1864.13 per sec.)
  23.  
  24. General statistics:
  25. total time: 10.7289s
  26. total number of events: 10000
  27. total time taken by event execution: 1067.3242s
  28. response time:
  29. min: 9.75ms
  30. avg: 106.73ms
  31. max: 450.30ms
  32. approx. 99 percentile: 284.52ms
  33.  
  34. Threads fairness:
  35. events (avg/stddev): 100.0000/4.15
  36. execution time (avg/stddev): 10.6732/0.05

相关参数

  1. sysbench --test=oltp help
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3.  
  4. oltp options:
  5. --oltp-test-mode=STRING 执行模式{simple,complex(advanced transactional),nontrx(non-transactional),sp}。默认是complex
  6. --oltp-reconnect-mode=STRING 重新连接模式{session(不使用重新连接。每个线程断开只在测试结束),transaction(在每次事务结束后重新连接),query(在每个SQL语句执行完重新连接),random(对于每个事务随机选择以上重新连接模式)}。默认是session
  7. --oltp-sp-name=STRING 存储过程的名称。默认为空
  8. --oltp-read-only=[on|off] 只读模式。Updatedeleteinsert语句不可执行。默认是off
  9. --oltp-skip-trx=[on|off] 省略begin/commit语句。默认是off
  10. --oltp-range-size=N 查询范围。默认是100
  11. --oltp-point-selects=N number of point selects [10]
  12. --oltp-simple-ranges=N number of simple ranges [1]
  13. --oltp-sum-ranges=N number of sum ranges [1]
  14. --oltp-order-ranges=N number of ordered ranges [1]
  15. --oltp-distinct-ranges=N number of distinct ranges [1]
  16. --oltp-index-updates=N number of index update [1]
  17. --oltp-non-index-updates=N number of non-index updates [1]
  18. --oltp-nontrx-mode=STRING 查询类型对于非事务执行模式{select, update_key, update_nokey, insert, delete} [select]
  19. --oltp-auto-inc=[on|off] AUTO_INCREMENT是否开启。默认是on
  20. --oltp-connect-delay=N 在多少微秒后连接数据库。默认是10000
  21. --oltp-user-delay-min=N 每个请求最短等待时间。单位是ms。默认是0
  22. --oltp-user-delay-max=N 每个请求最长等待时间。单位是ms。默认是0
  23. --oltp-table-name=STRING 测试时使用到的表名。默认是sbtest
  24. --oltp-table-size=N 测试表的记录数。默认是10000
  25. --oltp-dist-type=STRING 分布的随机数{uniform(均匀分布),Gaussian(高斯分布),special(空间分布)}。默认是special
  26. --oltp-dist-iter=N 产生数的迭代次数。默认是12
  27. --oltp-dist-pct=N 值的百分比被视为'special' (for special distribution)。默认是1
  28. --oltp-dist-res=N special’的百分比值。默认是75
  29.  
  30. General database options:
  31. --db-driver=STRING 指定数据库驱动程序('help' to get list of available drivers)
  32. --db-ps-mode=STRING 编制报表使用模式{auto, disable} [auto]
  33. Compiled-in database drivers:
  34. mysql - MySQL driver
  35. mysql options:
  36. --mysql-host=[LIST,...] 数据库地址
  37. --mysql-port=N 端口号,默认3306
  38. --mysql-user=STRING 用户名
  39. --mysql-password=STRING 密码
  40. --mysql-db=STRING 测试数据库名
  41. --mysql-table-engine=STRING 数据库存储引擎,默认innodb{myisam,innodb,bdb,heap,ndbcluster,federated}
  42. --mysql-socket=STRING socket文件的位置
  43. --mysql-engine-trx=STRING 是否使用事务,与存储引擎选择有关,默认auto{yes,no,auto}
  44. --mysql-ssl=[on|off] 在客户端是否使用SSL连接,默认off
  45. --myisam-max-rows=N MyISAM表最大行数,默认1000000
  46. --mysql-create-options=STRING additional options passed to CREATE TABLE []

参考地址

https://launchpad.net/sysbench

https://github.com/akopytov/sysbench

 

使用sysbench进行压力测试的更多相关文章

  1. [数据库]000 - 🍳Sysbench 数据库压力测试工具

    000 - Sysbench 数据库压力测试工具 sysbench 是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有 ...

  2. sysbench数据库压力测试

    sysbench是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试 wget https://github.com/akopytov/sysbench/archive/1.0. ...

  3. sysbench fileio 压力测试

    备注:   使用的是yum 安装   1. 安装 yum install -y sysbench 2. 命令 fileio options: --file-num=N number of files ...

  4. sysbench压力测试工具简介和使用(二)

    sysbench压力测试工具使用: 2.1    测试数据库服务器的硬件配置信息如下: CPU:      24核心线程数,Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00G ...

  5. sysbench压力测试工具简介和使用(一)

    sysbench压力测试工具安装和参数介绍 一.sysbench压力测试工具简介: sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据 ...

  6. 使用sysbench对mysql压力测试

    sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.关于这个项目的详细介绍请看:https://github.com/akopytov/sy ...

  7. sysbench压力测试工具安装及使用

    使用sysbench指定连接的时候不需要写上mysql-socket参数 如果自己使用sysbench来测试mysql性能的话,建议使用源码编译比较好,版本为0.4版本. 步骤是: .yum inst ...

  8. 使用sysbench 进行msyql oltp压力测试

    安装参考: https://github.com/akopytov/sysbench#linux#参数说明 需要说明的选项: mysql-db=dbtest1a:测试使用的目标数据库,这个库名要事先创 ...

  9. sysbench压力测试工具安装和参数介绍

    一.sysbench压力测试工具简介: sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL. ...

随机推荐

  1. 【转】Python中的GIL、多进程和多线程

    转自:http://lesliezhu.github.io/public/2015-04-20-python-multi-process-thread.html 目录 1. GIL(Global In ...

  2. 领域驱动设计(DDD)实现之路

    2004年,当Eric Evans的那本<领域驱动设计——软件核心复杂性应对之道>(后文简称<领域驱动设计>)出版时,我还在念高中,接触到领域驱动设计(DDD)已经是8年后的事 ...

  3. CSS布局 -- 左侧定宽,右侧自适应

    左侧定宽,右侧自适应 有很多种方法可以实现 缩小窗口试试看? 方案一: 左边左浮动,右边加个margin-left 查看 demo <!DOCTYPE html PUBLIC "-// ...

  4. dp - Google Code jam Qualification Round 2015 --- Problem B. Infinite House of Pancakes

    Problem B. Infinite House of Pancakes Problem's Link:   https://code.google.com/codejam/contest/6224 ...

  5. SqL数据库发布订阅非聚集索引没有被复制到订阅服务器的解决方案

    Non-Clustered Indexes not copying in Transactional Replication : SQL Server 2008 方法1: You have trans ...

  6. C# Form实现自定义光标

    WinForm代码如下: using System; using System.Reflection; using System.Runtime.InteropServices; using Syst ...

  7. java多线程(二)——锁机制synchronized(同步方法)

    synchronized Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码.当两个并发线程访问同一个对象object中 ...

  8. mysql服务器的字符集

    文章:http://www.cnblogs.com/fantiantian/p/3468454.html 的评论中有这样的文字: 谢谢沧海一滴的总结 在Linux中一般都是UTF-8字符集.我们在建数 ...

  9. 地理数据可视化:Simple,Not Easy

    如果要给2015年的地理信息行业打一个标签,地理大数据一定是其中之一.在信息技术飞速发展的今天,“大数据”作为一种潮流铺天盖地的席卷了各行各业,从央视的春运迁徙图到旅游热点预测,从大数据工程师奇货可居 ...

  10. [leetcode] Count Primes

    Count Primes Description: Count the number of prime numbers less than a non-negative number, n click ...