安装性能测试工具:sysbench

 

一、软件的用途,它主要包括以下几种方式的测试:
1、cpu性能
2、磁盘io性能
3、调度程序性能
4、内存分配及传输速度
5、POSIX线程性能
6、数据库性能(OLTP基准测试)

 

 

这个软件为什么找不到官网呢?giulib上面的网址只能下载源码。但是使用说明,却没有了。估计是一个个人软件,没有后续更新了。

最新版本是0.5版本。本来就是基本的功能,不需要完善的。所以更新不需要很频繁。比如memcache这种软件也十一月的。也就算1.x的版本。 

 

二、归纳安装步骤:

1、解压

2、运行源码目录中的./autogen.sh脚本。目的是进行自动清理,结果会在源码目录中生成一个configure文件

3、./configure --with-mysql-libs=/mysql安装目录/lib/ --with-mysql-includes=/mysql安装目录/include/

4、make && make install

5、设置环境变量

export LD_LIBRARY_PATH=/usr/mysql/lib 

 

 

 

 

可能涉及到的软件:

libtool工具

 

 

 

三、安装过程中遇到的疑惑和理解

 

 

在解压好的目录下运行命令:./autogen.sh,对环境进行清理(该操作是sysbench0.4.12独有的,不进行的话可能会报错)

运行上面命令后才会出现configure文件出来。

 

./configure --with-mysql-includes=/usr/local/include/mysql --with-mysql-libs=/usr/local/lib/mysql

--with-mysql-includes是指定mysql的什么目录,是安装目录还是什么? mysql安装目录下有个include目录, /usr/local/mysql/lib/include/

--with-mysql-libs项是指定mysql的什么目录呢? mysql安装目录下有个lib目录/usr/local/mysql/lib/

 

备注:网上有人说,这样子情况下,mysql必须是编译安装,不能rpm方式安装的mysql。

 

通过运行

./configure --with-mysql-includes=/usr/local/mysql/include/--with-mysql-libs=/usr/local/mysql/lib/

make && make install

 

没有报错。以为安装成功了?

 

于是运行: sysbench --test=cpu --cpu-max-prime=5000 run

想测试一下cpu

报错:


sysbench: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory

 

这说明sysbench无法找到mysql的库文件,这很可能是环境变量LD_LIBRARY_PATH没有设置,设置后即可解决该问题。

 

export LD_LIBRARY_PATH=/usr/mysql/lib

 

网上有些人的解决办法是:

# in -s /usr/local/mysql-5.5.8/lib/libmysqlclient.so.16 /lib64/libmysqlclient.so.16

这种解决思路是,考虑到sysbench会去/lib64/libmysqlclient.so.16目录下寻找mysqlclient,所以设置一个软链接的指向真实的mysqlclient目录去。

 

疑问:没有搞明白思路。很多人就是依样画葫芦,没有解释清楚里面的缘由。

  /usr/local/mysql/lib/libmysqlclient.so.18这个文件是干嘛的呢?

我的是报错libmysqlclient.so.18这个文件,而网上有些是libmysqlclient.so.16这个文件

 

我第二天来开虚拟机,发现会报这样的错误了。不知道什么原因。把export LD_LIBRARY_PATH=/usr/mysql/lib加到/etc/rc.local文件里面去,设置为开机就运行环境变量,竟然都没用。

 

 

 ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18

 

  如果操作系统是64位的,那么/usr/lib/libmysqlclient.so.18,中的lib要改成lib64,如:

 

 ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18

 

 

 

 

 

 

 

 

四、安装完毕,进行测试

 

 

cpu的测试结果如何阅读?

sysbench --test=cpu --cpu-max-prime=5000 run

 

Number of threads: 1表示使用了一个线程。默认使用一个线程。

 primer numbers limit,表示最大的质数限制,就是参数--cpu-max-prime指定的值

total numbers oof events, 最大的请求数目,默认为10000,0代表不限制

 

respones time是响应速度的计算。min为多次请求中执行耗费最小的时间,avg平均时间。max为多次请求中执行耗费最长的时间

 

 

 参数疑问:线程数,和最大请求数目有什么区别呢?

是不是表示一个线程都会进行total numbers of events次数的请求呢。那么总共接受的请求数就是“线程数*total numbers of events”

sysbench --help命令中的解释是概要

--num-threads=N             number of threads to use [1] 使用多少个线程

--max-requests=N            limit for total number of requests [10000] 最大请求数

 

根据推测,我是这么理解:多少个线程,可以想像多少台客户端(电脑或多少个用户)同时对测试目标发起请求,每个客户端发--max-requests个请求。

注:每台电脑不可能只发一个请求,发一个请求根本测试不出什么来。所以一般是连续发很多次请求。那么--max-requests就是指每个线程要发这么多次请求来进行测试。

所以最终的请求数:--num-threads*--max-requests。

 

 

 

 

 

 

 

 

 

 

 

 

 

我表示疑问了,对cpu性能进行测试,使用的是最大质数测试,实际含义是什么?怎么阅读上面的数据。

 

 

 为什么对cpu性能进行测试,是使用素数的加法运算呢?

 

是素性测试吧。官网是这么讲的

In this mode each request consists in calculation of prime numbers up
to a value specified by the --cpu-max-primes option. All calculations
are performed using 64-bit integers.

 

 primes英文意思是“最初的、最基本的、首要的"意思。prime numbers指的就是质数的意思。

 

 1、cpu测试的原理:针对素数做加法运算

 

素数也叫做质数。什么是质数,一个数为a,它只能除以两个数:1和它自己,但是不能除以其他数了。比如,3可以除以1,3可以除以3(它自己)。3除以2是无法整除的。

网上列出1000以内的质数:

1000以内

2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199 211 223 227 229
233 239 241 251 257 263 269 271 277 281
283 293 307 311 313 317 331 337 347 349
353 359 367 373 379 383 389 397 401 409
419 421 431 433 439 443 449 457 461 463
467 479 487 491 499 503 509 521 523 541
547 557 563 569 571 577 587 593 599 601
607 613 617 619 631 641 643 647 653 659
661 673 677 683 691 701 709 719 727 733
739 743 751 757 761 769 773 787 797 809
811 821 823 827 829 839 853 857 859 863
877 881 883 887 907 911 919 929 937 941
947 953 967 971 977 983 991 997
1000以内共168个

 

 

2,3,5,7都是属质数。比如7能够除以1,也能够除以7。但是除以2,3,4,5,6都不能除了(不能比7还大,大的数去相除,结果得到肯定是小数了)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 2、测试文件的读写性能的原理:

1、先创建文件

2、然后针对文件模拟多少个并发线程进行读写操作。看看响应速度。这种方式可以测试出磁盘的i/0能力

 

 

 总结:sysbench都是针对本地的cpu,内存性能进行测试。无法进行远程测试。因为都没有提供url的参数

 

 

 

 

 

 

 

 

 

 

 
使用参考资料:
http://blog.csdn.net/clh604/article/details/12108477
http://www.cnblogs.com/ylqmf/archive/2012/09/29/2708562.html

 

http://www.cnblogs.com/dyllove98/archive/2013/07/28/3221603.html 各个参数解释全面

 

 

 

附:测试选项说明

[root@localhost bin]# sysbench

测试用例:

  sysbench [general-options]... --test=<test-name> [test-options]... command

通用选项:

  --num-threads=N   创建测试线程的数目。默认为1.

  --max-requests=N   请求的最大数目。默认为10000,0代表不限制。

  --max-time=N   最大执行时间,单位是s。默认是0,不限制。

  --forced-shutdown=STRING  超过max-time强制中断。默认是off。]

  --thread-stack-size=SIZE   每个线程的堆栈大小。默认是32K。

  --init-rng=[on|off]  在测试开始时是否初始化随机数发生器。默认是off。

  --test=STRING      指定测试项目名称。值为以下值之一: fileio,cpu,memory,threads,mutex,oltp

  --debug=[on|off]    是否显示更多的调试信息。默认是off。

  --validate=[on|off]   在可能情况下执行验证检查。默认是off。


 
  

 

 帮助命令的使用:

列出所有命令

sysbench --help 

 列出指定的测试项使用说明

sysbench --test=cpu help

 
  

查看具体的测试项的参数

sysbench --test=threads help

参数名

描述

--thread-yields=N

内存块大小,默认为1K

--thread-locks=N

传输的数据量,默认为100G

sysbench --test=cpu help

 

 



 

apache的ab工具使用:

D:\soft\kaifa\ide\wamp\bin\apache\apache2.4.9\bin>ab.exe  -n 50 -c 40 http://www.ab.com:1080/test_mc_pconnect.php

其中-n代表请求数,-c代表并发数

 

50个请求,40个并发。并发是不是可以理解成40个用户。每个用户发送50个请求

 

 

 

 网友有解释:

---------------------------------------

10个并发就是瞬间10个请求到服务器上去,如果服务器处理的快,那么就继续但是使用参数中有请求总数,其实就是以每次10个并发的方式将你设置的请求总数都压到服务器上去,看服务器多久可以处理完,计算平均每秒的响应情况。

---------------------------------------

上面这个理解是错误的。

 

ab 的并发数是指 ab 同时创建多少个线程来发起请求。

 

 

实际上就是同时100个线程进行请求。可以理解为同时100个用户进行请求。每个线程连续对url请求多少次呢?

就是n参数指定的值。

 

-n 600 -c 500

是这样理解:创建500个线程同时请求指定url。每个线程要连续请求600次(是分批请求的,我们会看到统计信息中提示,已经完成100个请求,已经完成200个请求。已经完成300个请求。)

纠正:理解错误了。n不是表示每个线程请求这么多次数。而是表示c个线程,总共请求这么多次数。

所以每个线程请求是n/c个。这么来说,至少每个线程要发一个请求。所以呢。n的值必须是>=c才行。否则不好分配每个线程,每个线程至少的分到一个请求才行。

 

为什么请求数不能比并发数低呢?

这个参数就好理解了。

 

 参考:http://wenku.baidu.com/link?url=HZxYk5tFJIeTkyWMaRaIF79fLiDCsW1mJ9dqchYEaDi84T37u1Xxy__-HiSt4R8RnJZPcxsmurykQ61kkMk0_B-7OSapCwzE4FucHuQpk1q

 

 

ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。

ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。

你可能感兴趣的:(性能测试)