安装性能测试工具:sysbench和使用apache的ab

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 一、软件的用途,它主要包括以下几种方式的测试:1、cpu性能2、磁盘io性能3、调度程序性能4、内存分配及传输速度5、POSIX线程性能6、数据库性能(OLTP基准测试)     这个软件为什么找不到官网呢?giulib上面的网址只能下载源码。

 

一、软件的用途,它主要包括以下几种方式的测试:
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/40)个请求。

 

 

备注:url可以使用引号引起来。也可以不引。

 

 这里的统计结果要怎么读取,怎么获取到有用的信息呢?

 

 

 

 

 网友有解释:

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

10个并发,就是瞬间10个请求到服务器上去(模拟10个并发请求)如果服务器处理的快,那么就继续但是使用参数中有请求总数

其实就是以每次10个并发的方式,将你设置的请求总数都压到服务器上去,看服务器多久可以处理完,计算平均每秒的响应情况。

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

 

 

-n 600 -c 500

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

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

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

 

目前,非常确定的是。c表示瞬间这么多个请求到服务器(也就是我们常常说的并发)。ab的命令中已经解释了这个参数是Number of multiple requests to make at a time

make a time就是瞬间。

 

同时创建这么多个并发请求到服务器。如果服务器还能接受,则继续发起请求,怎么个发起法呢?

比如目前设置n是10000万。并发数设置为5000个并发。那么则第一次发起掉5000个。服务器能够处理完。

那好继续发起并发请求。此时是10000-5000个了。

 

终于明白这个n表示的实际含义正如英文描述的那样: Number of requests to perform。总请求次数。是多次请求累加得到的结果。

 

 

ab.exe -n 10000 -c 5000

5千个并发请求到服务器去。如果能够接受,那么继续发起剩下的(总数-已请求的次数),也就是(10000-5000)个。

 

 

 

为什么请求数不能比并发数低呢?这个参数就好理解了。

 

 

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

 

 

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

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

 

 

 

 

 

 

 

 

 

 

Server Software:        Apache/2.0.54
//平台apache 版本2.0.54
Server Hostname:        127.0.0.1
//服务器主机名
Server Port:            80
//服务器端口

Document Path:          /index.html.zh-cn.gb2312
//测试的页面文档
Document Length:        1018 bytes
//文档大小

Concurrency Level:      1000
//并发数
Time taken for tests:   8.188731 seconds
//整个测试持续的时间
Complete requests:      1000
//完成的请求数量
Failed requests:        0
//失败的请求数量
Write errors:           0

Total transferred:      1361581 bytes
//整个场景中的网络传输量
HTML transferred:       1055666 bytes
//整个场景中的HTML内容传输量
Requests per second:    122.12 [#/sec] (mean)
//大家最关心的指标之一,相当于 LR 中的 每秒事务数 ,后面括号中的 mean 表示这是一个平均值
Time per request:       8188.731 [ms] (mean)
//大家最关心的指标之二,相当于 LR 中的 平均事务响应时间 ,后面括号中的 mean 表示这是一个平均值
Time per request:       8.189 [ms] (mean, across all concurrent requests)
//每个请求实际运行时间的平均值
Transfer rate:          162.30 [Kbytes/sec] received
//平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题

Connection Times (ms)
  min mean[+/-sd] median   max
Connect:        4 646 1078.7     89    3291
Processing:   165 992 493.1    938    4712
Waiting:      118 934 480.6    882    4554
Total:        813 1638 1338.9   1093    7785
//网络上消耗的时间的分解,各项数据的具体算法还不是很清楚

Percentage of the requests served within a certain time (ms)
50%   1093
66%   1247
75%   1373
80%   1493
90%   4061
95%   4398
98%   5608
99%   7368
100%   7785 (longest request)


//整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于1093 毫秒,60% 的用户响应时间小于1247 毫秒,最大的响应时间小于7785 毫秒

      由于对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数

 

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
2月前
|
前端开发 测试技术 Python
【Selenium全攻略】掌握这一工具,实现自动化测试的所有梦想
本文分享了使用Selenium进行UI自动化测试的全过程,包括开发环境部署、代码实现、思路分析和难点解析。作者通过一个实际案例,讲述了如何利用Selenium处理前端生成报告失败的问题,以及在UI自动化中定位元素和处理元素不唯一的情况。同时,文章强调了解决问题思路的重要性,鼓励读者开拓思维,寻找不同的解决方案。
93 4
【Selenium全攻略】掌握这一工具,实现自动化测试的所有梦想
|
2月前
|
前端开发 jenkins 测试技术
自动化测试介绍,为何 Apifox 是进行自动化测试的最佳工具
自动化测试利用专用软件执行测试用例,比手动测试更高效准确。Apifox是一款集API文档、调试与自动化测试于一体的工具,提供一体化解决方案,简化API变更管理。其强大的测试功能支持丰富的断言及测试场景组合,便于模拟真实业务流程。Apifox还提供详尽的测试报告与分析功能,有助于快速定位问题。此外,它能轻松集成到CI/CD流程中,并支持定时任务及多分支管理,极大提升了测试效率和团队协作。相较于其他工具,Apifox以其全面的功能和友好的界面脱颖而出。
|
13天前
|
Linux
kickstart自动安装系统 --DHCP 配置及测试
PXE+Kickstart自动安装系统需配置DHCP服务器分配IP。dhcpd.conf示例:设置更新样式、忽略客户端更新、指定下一服务器及启动文件。定义子网、网关、掩码、动态地址池并预留特定MAC地址。重启xinetd、NFS、DHCP服务,确保新服务器与Kickstart服务器在同一网络,避免误装其他机器。注意隔离测试网络以防干扰生产环境。
60 18
|
14天前
|
测试技术
基于LangChain手工测试用例转App自动化测试生成工具
在传统App自动化测试中,测试工程师需手动将功能测试用例转化为自动化用例。市面上多数产品通过录制操作生成测试用例,但可维护性差。本文探讨了利用大模型直接生成自动化测试用例的可能性,介绍了如何使用LangChain将功能测试用例转换为App自动化测试用例,大幅节省人力与资源。通过封装App底层工具并与大模型结合,记录执行步骤并生成自动化测试代码,最终实现高效自动化的测试流程。
27 4
|
2月前
|
测试技术 Linux 虚拟化
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
详细的VMware虚拟机安装macOS Big Sur的保姆级教程,包括下载VMware和macOS镜像、图解安装步骤和遇到问题时的解决方案,旨在帮助读者顺利搭建macOS虚拟机环境。
59 3
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
|
2月前
|
存储 Ubuntu 安全
ROS2教程02 ROS2的安装、配置和测试
本文是关于ROS2(机器人操作系统2)的安装、配置和测试的教程。内容包括使用一键安装脚本快速安装ROS2 Humble版,手动安装步骤,设置语言环境、添加软件源、更新软件包、安装ROS2桌面版和开发工具,配置ROS2环境,创建工作空间,配置ROS2领域以避免网络冲突,以及如何删除ROS2。此外,还包括了测试ROS2是否安装成功的两个案例:基本的Topic通信测试和使用Turtlesim演示程序。适用于Ubuntu 22.04操作系统。
87 1
ROS2教程02 ROS2的安装、配置和测试
|
3天前
|
安全 测试技术 Linux
CentOS7 安装vulhub漏洞测试环境
CentOS7 安装vulhub漏洞测试环境
|
1月前
|
监控 安全 Linux
如何利用Kali Linux进行网站渗透测试:最常用工具详解
如何利用Kali Linux进行网站渗透测试:最常用工具详解
70 6
|
8天前
|
Web App开发 Linux Python
linux上安装selenium环境及测试
该文章提供了在Linux CentOS上安装Selenium环境、Chrome浏览器及Chromedriver的详细步骤,并演示了如何以无头模式进行测试。
22 0
|
1月前
|
安全 Linux 测试技术
Kali Linux预装的自动化渗透测试工具
Kali Linux预装的自动化渗透测试工具
43 2

推荐镜像

更多
下一篇
无影云桌面