针对系统和数据库压测是项目上线前必做的一项,这里使用的是最新版本的sysbench做的压测使用详解。sysbench可以做系统层面的压力测试(CPU、内存、硬盘IO、互斥锁、Thead),也可以做数据库(MySQL/Oracle/PG)层面的压力测试。安装容易,操作便捷,是压测使用的重要工具之一。
一、sysbench下载
项目地址:https://launchpad.net/sysbench下载地址:https://github.com/akopytov/sysbench/archive/1.0.3.tar.gz二、sysbench安装
[root@DB_TEST tools]# tar -xzvf sysbench-1.0.3.tar.gz
[root@DB_TEST tools]# cd sysbench-1.0.3
[root@DB_TEST sysbench-1.0.3]# ./autogen.sh
[root@DB_TEST sysbench-1.0.3]#./configure  --prefix=/usr/local/sysbench --with-mysql
[root@DB_TEST sysbench-1.0.3]# make
[root@DB_TEST sysbench-1.0.3]# make install
[root@DB_TEST sysbench-1.0.3]#  cp -rp /usr/local/sysbench/bin/sysbench  /usr/bin/
[root@DB_TEST sysbench-1.0.3]# /usr/local/sysbench/bin/sysbench --help   
点击(此处)折叠或打开

  1. [root@BJ-133-22 sysbench-1.0.3]# /usr/local/sysbench/bin/sysbench --help
  2. Usage:
  3. sysbench [options]... [testname] [command]
  4. Commands implemented by most tests: prepare run cleanup help
  5. General options:
  6. --threads=N number of threads to use [1]
  7. --events=N limit for total number of events [0]
  8. --time=N limit for total execution time in seconds [10]
  9. --forced-shutdown=STRING number of seconds to wait after the --time limit before forcing shutdown, or 'off' to disable [off]
  10. --thread-stack-size=SIZE size of stack per thread [64K]
  11. --rate=N average transactions rate. 0 for unlimited rate [0]
  12. --report-interval=N periodically report intermediate statistics with a specified interval in seconds. 0 disables intermediate reports [0]
  13. --report-checkpoints=[LIST,...] dump full statistics and reset all counters at specified points in time. The argument is a list of comma-separated values representing the amount of time in seconds elapsed from start of test when report checkpoint(s) must be performed. Report checkpoints are off by default. []
  14. --debug[=on|off] print more debugging info [off]
  15. --validate[=on|off] perform validation checks where possible [off]
  16. --help[=on|off] print help and exit [off]
  17. --version[=on|off] print version and exit [off]
  18. --config-file=FILENAME File containing command line options
  19. --tx-rate=N deprecated alias for --rate [0]
  20. --max-requests=N deprecated alias for --events [0]
  21. --max-time=N deprecated alias for --time [0]
  22. --num-threads=N deprecated alias for --threads [1]
  23. Pseudo-Random Numbers Generator options:
  24. --rand-type=STRING random numbers distribution {uniform,gaussian,special,pareto} [special]
  25. --rand-spec-iter=N number of iterations used for numbers generation [12]
  26. --rand-spec-pct=N percentage of values to be treated as 'special' (for special distribution) [1]
  27. --rand-spec-res=N percentage of 'special' values to use (for special distribution) [75]
  28. --rand-seed=N seed for random number generator. When 0, the current time is used as a RNG seed. [0]
  29. --rand-pareto-h=N parameter h for pareto distibution [0.2]
  30. Log options:
  31. --verbosity=N verbosity level {5 - debug, 0 - only critical messages} [3]
  32. --percentile=N percentile to calculate in latency statistics (1-100). Use the special value of 0 to disable percentile calculations [95]
  33. --histogram[=on|off] print latency histogram in report [off]
  34. General database options:
  35. --db-driver=STRING specifies database driver to use ('help' to get list of available drivers)
  36. --db-ps-mode=STRING prepared statements usage mode {auto, disable} [auto]
  37. --db-debug[=on|off] print database-specific debug information [off]
  38. Compiled-in database drivers:
  39. mysql - MySQL driver
  40. mysql options:
  41. --mysql-host=[LIST,...] MySQL server host [localhost]
  42. --mysql-port=[LIST,...] MySQL server port [3306]
  43. --mysql-socket=[LIST,...] MySQL socket
  44. --mysql-user=STRING MySQL user [sbtest]
  45. --mysql-password=STRING MySQL password []
  46. --mysql-db=STRING MySQL database name [sbtest]
  47. --mysql-ssl[=on|off] use SSL connections, if available in the client library [off]
  48. --mysql-ssl-cipher=STRING use specific cipher for SSL connections []
  49. --mysql-compression[=on|off] use compression, if available in the client library [off]
  50. --mysql-debug[=on|off] trace all client library calls [off]
  51. --mysql-ignore-errors=[LIST,...] list of errors to ignore, or "all" [1213,1020,1205]
  52. --mysql-dry-run[=on|off] Dry run, pretend that all MySQL client API calls are successful without executing them [off]
  53. Compiled-in tests:
  54. fileio - File I/O test
  55. cpu - CPU performance test
  56. memory - Memory functions speed test
  57. threads - Threads subsystem performance test
  58. mutex - Mutex performance test
  59. See 'sysbench help' for a list of options for each test.

三、sysbench使用
1、CPU性能测试

cpu性能测试:找范围内最大素数{时间越短越好}

cpu性能测试主要是根据素数的加法运算,这里指定最大素数(质数)为80000,--num-threads=`grep "processor" /proc/cpuinfo | wc -l`指定线程数,默认是1

/usr/local/sysbench/bin/sysbench --test=cpu --cpu-max-prime=80000 run

点击(此处)折叠或打开

  1. [root@db_test ~]# /usr/local/sysbench/bin/sysbench --test=cpu --cpu-max-prime=80000 run
  2. WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
  3. sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)
  4. Running the test with following options:
  5. Number of threads: 1
  6. Initializing random number generator from current time
  7. Prime numbers limit: 80000
  8. Initializing worker threads...
  9. Threads started!
  10. General statistics:
  11. total time: 10.0057s
  12. total number of events: 520
  13. Latency (ms):
  14. min: 18.74
  15. avg: 19.24
  16. max: 19.39
  17. 95th percentile: 19.29
  18. sum: 10005.32
  19. Threads fairness:
  20. events (avg/stddev): 520.0000/0.00
  21. execution time (avg/stddev): 10.0053/0.00

实际环境CPU拷机压测脚本如下:

echo -e "进行CPU压力测试: 寻找小于1千万的最大质数,并发线程数10,最大请求数100 "

/usr/local/bin/sysbench --num-threads=10 --max-requests=100 --test=cpu --debug --cpu-max-prime=10000000 run

2、内存性能测试

sysbench 测试memory的时候是顺序读或写内存的。根据选项的不同,每次操作过程中,每个线程可以获取global或本地的数据块

内存:以不同块大小传输一定数量的数据吞吐量大小{越大越好}

点击(此处)折叠或打开

  1. [root@db_test fileio]# /usr/local/sysbench/bin/sysbench --test=memory help
  2. WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
  3. sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)
  4. memory options:
  5. --memory-block-size=SIZE size of memory block for test [1K]  测试时内存块大小
  6. --memory-total-size=SIZE total size of data to transfer [100G] 传输数据总大小
  7. --memory-scope=STRING memory access scope {global,local} [global]  内存访问范围
  8. --memory-hugetlb[=on|off] allocate memory from HugeTLB pool [off] 从<span "=""> HugeTLB pool内存分配
  • --memory-oper=STRING type of memory operations {read, write, none} [write] 内存操作类型
  • --memory-access-mode=STRING memory access mode {seq,rnd} [seq] 存储器存取方式

示例:测试传输数据总量为5G,每个块大小是1K(一般设置是8K),连续读写的情况下,吞吐量3435.87 MiB/sec
[root@db_test fileio]# /usr/local/sysbench/bin/sysbench --test=memory --memory-block-size=1K --memory-total-size=5G run
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Initializing worker threads...

Threads started!

Operations performed: 5242880 (3518332.06 ops/sec)

5120.00 MiB transferred (3435.87 MiB/sec)

General statistics:
    total time:                          1.4883s
    total number of events:              5242880

Latency (ms):
         min:                                  0.00
         avg:                                  0.00
         max:                                  0.03
         95th percentile:                      0.00
         sum:                                631.01

Threads fairness:
    events (avg/stddev):           5242880.0000/0.00
    execution time (avg/stddev):   0.6310/0.00

实际内存压力测试脚本:

echo -e "进行内存压力测试: 测试范围32G,并发线程数10,最大请求数100, 读 "

/usr/local/bin/sysbench --num-threads=10 --max-requests=100 --test=memory --memory-block-size=8K --memory-total-size=${MEM}G --memory-oper=read run

echo -e "进行内存压力测试: 测试范围32G,并发线程数10,最大请求数100, 写 "

/usr/local/bin/sysbench --num-threads=10 --max-requests=100 --test=memory --memory-block-size=8K --memory-total-size=${MEM}G --memory-oper=write run

3、磁盘IO性能测试

IO性能测试:不同场景下IOPS{越大越好}

点击(此处)折叠或打开

  1. [root@db_test sysbench-1.0.3]# /usr/local/sysbench/bin/sysbench --test=fileio help
  2. WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
  3. sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)
  4. fileio options:
  5. --file-num=N number of files to create [128]
  6. --file-block-size=N block size to use in all IO operations [16384]
  7. --file-total-size=SIZE total size of files to create [2G]
  8. --file-test-mode=STRING test mode {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}
  9. --file-io-mode=STRING file operations mode {sync,async,mmap} [sync]
  10. --file-async-backlog=N number of asynchronous operatons to queue per thread [128]
  11. --file-extra-flags=STRING additional flags to use on opening files {sync,dsync,direct} []
  12. --file-fsync-freq=N do fsync() after this number of requests (0 - don't use fsync()) [100]
  13. --file-fsync-all[=on|off] do fsync() after each write operation [off]
  14. --file-fsync-end[=on|off] do fsync() at the end of test [on]
  15. --file-fsync-mode=STRING which method to use for synchronization {fsync, fdatasync} [fsync]
  16. --file-merged-requests=N merge at most this number of IO requests if possible (0 - don't merge) [0]
  17. --file-rw-ratio=N reads/writes ratio for combined test [1.5]

--file-num=N                       创建测试文件数量,默认是 [128]
--file-block-size=N                测试时文件块大小,默认是[16384],即16K
--file-total-size=SIZE             测试文件的总大小,默认是 [2G]
--file-test-mode=STRING            测试模式 {seqwr(顺序写), seqrewr(顺序读写), seqrd(顺序读), rndrd(随机读), rndwr(随机写), rndrw(随机读写)}
--file-io-mode=STRING              文件操作模式{sync,async,mmap} [sync]
--file-extra-flags=STRING          使用额外的标志打开文件 {sync,dsync,direct} []
--file-fsync-freq=N                执行fsync()频率,0表示不使用,默认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表示不合并
--file-rw-ratio=N                  测试读写比例,默认[1.5]

seqwr 顺序写入
seqrewr 顺序重写
seqrd 顺序读取
rndrd 随机读取
rndwr 随机写入
rndrw 混合随机读/写

FileIO示例01:prepare 命令创建了128个文件总共大小为10G ,文件读写模式为随机读写混合方式。run 命令则进行测试,并返回结果,cleanup 删除测试产生的文件!
##Fileio准备工作,生成测试数据(最好比内存的2倍大)
[root@db_test fileio]# /usr/local/sysbench/bin/sysbench  --num-threads=16 --test=fileio --file-total-size=10G --file-test-mode=rndrw prepare
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
WARNING: --num-threads is deprecated, use --threads instead
sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)

128 files, 81920Kb each, 10240Mb total
Creating files for the test...
Extra file open flags: 0
Creating file test_file.0
...
Creating file test_file.127
10737418240 bytes written in 9.96 seconds (1027.97 MiB/sec).
##正式执行FileIO测试
[root@db_test fileio]# /usr/local/sysbench/bin/sysbench  --num-threads=16 --test=fileio --file-total-size=10G --file-test-mode=rndrw run
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
WARNING: --num-threads is deprecated, use --threads instead
sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 16
Initializing random number generator from current time

Extra file open flags: 0
128 files, 80MiB each
10GiB total file size
Block size 16KiB
Number of IO requests: 0
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Initializing worker threads...

Threads started!

File operations:
    reads/s:                      1449.16
    writes/s:                     965.91
    fsyncs/s:                     3083.55

Throughput:
    read, MiB/s:                  22.64
    written, MiB/s:               15.09

General statistics:
    total time:                          10.4176s
    total number of events:              57291

Latency (ms):
         min:                                  0.00
         avg:                                  2.87
         max:                                825.08
         95th percentile:                      0.17
         sum:                             164312.66

Threads fairness:
    events (avg/stddev):           3580.6875/469.53
    execution time (avg/stddev):   10.2695/0.08

IO密切相关的包括每秒请求数和总吞吐量,中请求数是(1449.16+965.91+3083.55)/s,吞吐量是(22.64+15.09)MB/s

##清理创建的文件
[root@db_test fileio]# /usr/local/sysbench/bin/sysbench  --num-threads=16 --test=fileio --file-total-size=10G --file-test-mode=rndrw cleanup
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
WARNING: --num-threads is deprecated, use --threads instead
sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)

Removing test files...

实际环境FILEIO压力测试脚本:

echo -e "进行IO压力测试: 20个文件,每个10GB,随机读写 "

/usr/local/bin/sysbench --file-num=20 --num-threads=20 --test=fileio --file-total-size=${HDD}G --max-requests=1000000 --file-test-mode=rndrw prepare

/usr/local/bin/sysbench --file-num=20 --num-threads=20 --test=fileio --file-total-size=${HDD}G --max-requests=1000000 --file-test-mode=rndrw run

/usr/local/bin/sysbench --file-num=20 --num-threads=20 --test=fileio --file-total-size=${HDD}G --max-requests=1000000 --file-test-mode=rndrw cleanup

4、thread测试

线程调度:线程并发执行,循环响应信号量花费的时间{越少越好}
测试线程调度器的性能。对于高负载情况下测试线程调度器的行为非常有用

点击(此处)折叠或打开

  1. [root@db_test fileio]# /usr/local/sysbench/bin/sysbench --test=threads help
  2. WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
  3. sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)
  4. threads options:
  5. --thread-yields=N number of yields to do per request [1000] 每个请求产生多少个线程,默认<span "="">[1000]
  6. --thread-locks=N number of locks per thread [8]    每个线程的锁数量,默认 [8]

示例:
[root@db_test fileio]# /usr/local/sysbench/bin/sysbench --num-threads=64 --test=threads --thread-yields=100 --thread-locks=2 run
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
WARNING: --num-threads is deprecated, use --threads instead
sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 64
Initializing random number generator from current time

Initializing worker threads...

Threads started!

General statistics:
    total time:                          10.0043s
    total number of events:              102842

Latency (ms):
         min:                                  0.02
         avg:                                  6.22
         max:                                 28.83
         95th percentile:                     15.00
         sum:                             640039.96

Threads fairness:
    events (avg/stddev):           1606.9062/31.79
    execution time (avg/stddev):   10.0006/0.00

5、互斥锁测试

互斥锁:并发线程同时申请互斥锁循环一定次数花费的时间{越少越好}

测试互斥锁的性能,方式是模拟所有线程在同一时刻并发运行,并都短暂请求互斥锁

点击(此处)折叠或打开

  1. [root@db_test fileio]# /usr/local/sysbench/bin/sysbench --test=mutex help
  2. WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
  3. sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)
  4. mutex options:
  5. --mutex-num=N total size of mutex array [4096] 数组互斥总大小,默认<span "="">[4096]
  6. --mutex-locks=N number of mutex locks to do per thread [50000] 每个线程互斥锁的数量,默认 [50000]
  7. --mutex-loops=N number of empty loops to do inside mutex lock [10000] 内部互斥锁的空循环数量,默认 [10000]

所有线程同时执行,获取短时间的mutex lock,以便测试mutex的实现!

示例:
[root@db_test fileio]# /usr/local/sysbench/bin/sysbench --test=mutex --mutex-num=4096 --mutex-locks=50000 --mutex-loops=20000 run 
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Initializing worker threads...

Threads started!

General statistics:
    total time:                          0.0021s
    total number of events:              1

Latency (ms):
         min:                                  2.05
         avg:                                  2.05
         max:                                  2.05
         95th percentile:                      2.03
         sum:                                  2.05

Threads fairness:
    events (avg/stddev):           1.0000/0.00
    execution time (avg/stddev):   0.0020/0.00

最新文章

  1. html学习第一天笔记
  2. 各种隐藏 WebShell、创建、删除畸形目录、特殊文件名、黑帽SEO作弊(转自核大大)
  3. Coder-Strike 2014 - Round 1 D. Giving Awards
  4. table表格某一td内容太多导致样式混乱的解决方案
  5. [洛谷U871]building
  6. OC语言-02面向对象的三大特性
  7. MCS-51特殊功能寄存器(SPR)的C51定义
  8. word和.txt文件转html 及pdf文件, 使用poi jsoup itext心得
  9. ML神器:sklearn的快速使用
  10. iOS 防止UIButton重复点击
  11. SQL拼接字符串时单引号转义问题 单引号转义字符
  12. Git抽取版本之间的差异,打包解压
  13. 项目ITP(五) spring4.0 整合 Quartz 实现任务调度
  14. Day 10733 使用独立安装包安装.Net Framework 4.6.2时,提示『无法建立到信任根颁发机构的证书链』
  15. Sql 通过表名查找所有列名
  16. maven 从私仓库下载jar包
  17. 取消word中所有超链接
  18. Basestation函数解析(二)
  19. pygame系列_第一个程序_图片代替鼠标移动
  20. P2085 最小函数值(minval)

热门文章

  1. maven3.5.0在win10中的安装及环境变量配置
  2. 安装连接mysql8时候遇到的问题以及解决(转)
  3. 通过powerdesiner导出sql,通过sql转mysql为oracle
  4. springMVC学习五(转发和乱码)
  5. python redis操作数据库方法
  6. IDEA发布应用时发布到lib下面的包不全
  7. JavaWeb基础知识总结
  8. sql,取得当前系统时间,算时间区间
  9. Unity 3D光源-Point Light点光源详解/灯泡、模拟灯光效果教程
  10. 20155208实验三 敏捷开发与XP实践