1. 前言
本文主要讲解如何使用sysbench这款软件对Linux服务器进行基准测试,它支持CPU、线程、内存、数据库压力测试,是程序开发专业人员经常使用的一款基准压力测试软件。
2. 基准测试与压力测试
基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑,更加简单、直接、易于测试,数据可以由工具生成,不要求真实;而压力测试一般考虑业务逻辑(如购物车业务),要求真实的数据。
3. 基准测试的作用
对于多数Web应用,整个系统的瓶颈在于数据库;原因很简单:Web应用中的其他因素,例如网络带宽、负载均衡节点、应用服务器(包括CPU、内存、硬盘灯、连接数等)、缓存,都很容易通过水平的扩展(俗称加机器)来实现性能的提高。而对于MySQL,由于数据一致性的要求,无法通过增加机器来分散向数据库写数据带来的压力;虽然可以通过前置缓存(Redis等)、读写分离、分库分表来减轻压力,但是与系统其它组件的水平扩展相比,受到了太多的限制。
而对数据库的基准测试的作用,就是分析在当前的配置下(包括硬件配置、OS、数据库设置等),数据库的性能表现,从而找出MySQL的性能阈值,并根据实际系统的要求调整配置。
4. 基准测试的指标
数据库指标
- TPS/QPS:衡量吞吐量。
- 响应时间:包括平均响应时间、最小响应时间、最大响应时间、时间百分比等,其中时间百分比参考意义较大,如前95%的请求的最大响应时间。。
- 并发量:同时处理的查询请求的数量。
5. 基准测试的分类
对MySQL的基准测试,有如下两种思路:
- 针对整个系统的基准测试:通过http请求进行测试,如通过浏览器、APP或postman等测试工具。该方案的优点是能够更好的针对整个系统,测试结果更加准确;缺点是设计复杂实现困难。
- 只针对MySQL的基准测试:优点和缺点与针对整个系统的测试恰好相反。
在针对MySQL进行基准测试时,一般使用专门的工具进行,例如mysqlslap、sysbench等。其中,sysbench比mysqlslap更通用、更强大,且更适合Innodb(因为模拟了许多Innodb的IO特性),下面介绍使用sysbench进行基准测试的方法。
6. 安装sysbench
7. 使用sysbench测试系统性能
软件安装完成后,就要开始测试各种性能了,测试的方法官网网站上也提到一些,但涉及到 OLTP 测试的部分却不够准确。在这里我大致提一下:
7.1 cpu性能测试
自己可以根据机器cpu的性能来适当调整数值。如下二图查看CPU配置!
- [root@zcwyou ~]# cat /proc/cpuinfo
sysbench01.png
7.2 执行以下命令,进行CPU测试
[root@zcwyou ~]# sysbench --test=cpu --cpu-max-prime=20000 run
sysbench进行CPU测试
cpu测试主要是进行素数的加法运算,在下图例子中,指定了最大的质数发生器数量为 20000,可以看出服务器此次测试 执行时间 大约为10.0005s秒7.3 线程测试
- [root@zcwyou ~]# sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run
如下图 (发送64次/个测试线程请求,每次/个线程请求产生/生成100个数量,每个线程的锁数量为2) ,下图的测试执行时间为10.0051s秒
sysbench线程测试.png
7.4 内存测试
- [root@zcwyou ~]# sysbench --test=memory --memory-block-size=8k --memory-total-size=4G run
上述参数指定了本次测试整个过程是在内存中传输 4G 的数据量,每个 block 大小为 8K。测试结果如下图:
执行时间为0.3844秒,每秒传输速度为10586.47Mb每秒
sysbench内存测试
7.5 OLTP测试
- [root@zcwyou ~]# sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=1000000 --mysql-socket=/tmp/mysql.sock --mysql-user=test --mysql-host=localhost --mysql-password=test prepare
上述参数指定了本次测试的表存储引擎类型为 myisam,这里需要注意的是,官方网站上的参数有一处有误,即 --mysql-table-engine,官方网站上写的是 --mysql-table-type,这个应该是没有及时更新导致的。另外,指定了表最大记录数为 1000000,其他参数就很好理解了,主要是指定登录方式。测试 OLTP 时,可以自己先创建数据库 sbtest,或者自己用参数 --mysql-db 来指定其他数据库。--mysql-table-engine 还可以指定为 innodb 等 MySQL 支持的表存储引擎类型。
8. 总结
sysbench可以用于CPU、线程、内存、数据库压力测试,是一个综合性能的判断工具,也往往用于判断硬件和系统的稳定性,应该是一款不错的拷机软件。