0%

性能压测

本文主要包括:

  • 数据库压测工具-mysqlslap
  • 压测工具jmeter使用笔记

数据库压测工具-mysqlslap

在对Starrocks做高并发压测的时候,一开始使用的python,但是,每次做压测都要手写代码,因为starrocks支持mysql协议,所以可以直接使用mysql自带的压测工具来压测

mysqlslap简介

mysqlslap是mysql自带的基准测试工具,优点:查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较.msqlslap为mysql性能优化前后提供了直观的验证依据

常用的选项
--concurrency                   并发数量,多个可以用逗号隔开
--engines                      要测试的引擎,可以有多个,用分隔符隔开,如--engines=myisam,innodb
--iterations                    要运行这些测试多少次
--auto-generate-sql           用系统自己生成的SQL脚本来测试
--auto-generate-sql-load-type     要测试的是读还是写还是两者混合的(read,write,update,mixed)
--number-of-queries            总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算
--debug-info                额外输出CPU以及内存的相关信息
--number-int-cols             创建测试表的int型字段数量
--number-char-cols             创建测试表的chat型字段数量
--create-schema               测试的database
--query                        脚本执行测试,自己的SQL 
--only-print                 如果只想打印看看SQL语句是什么,可以用这个选项

使用案例

mysqlslap --user=root --password=DiGiWin123 --host=ddp1 --port=19030  --create-schema=mysqlslap --iterations=2 --concurrency=1000 --query=aaa.sql

其中,aaa.sql是sql文件

SELECT DISTINCT A.PRODUCTION_SN as PRSN FROM SMESPROD_back.TBLVEHICLEPRDRELATION_NEW A LEFT JOIN SMESPROD_back.TBLVEHICLEPRDCHECKINFO_NEW B ON  A.LOTNO = B.LOTNO WHERE  ISCHANGE=0 AND A.VEHICLENO = '2-01-0-0108' AND A.LOTNO = 'TEST01' AND B.OPNO = 'A0850' AND B.CHECK_TYPE = '1';

直接执行这个测试用例会报错:

mysqlslap: Error when connecting to server: 1064 Unknown database 'mysqlslap'

这是因为starrocks里没有mysqlslap数据库。创建一个mysqlslap数据库即可
测试结果返回:

Benchmark
        Average number of seconds to run all queries: 2.246 seconds    # 1000个客户端(并发)同时运行这些SQL语句平均要花2.246秒
        Minimum number of seconds to run all queries: 1.940 seconds    
        Maximum number of seconds to run all queries: 2.552 seconds
        Number of clients running queries: 1000                        # 总共1000个客户端(并发)运行这些sql查询
        Average number of queries per client: 1                        # 每个客户端(并发)平均运行1次查询

压测工具jmeter

Jmeter简介

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。
官网:http://jmeter.apache.org/download_jmeter.cgi

因为JMeter是使用JAVA写的,所以使用JMeter之前,先安装JAVA环境,本文就不讲不如安装JAVA环境了。.

  • windows下
    解压下载的二进制包,进入bin目录,使用jmeter.bat启动程序。
  • linux/mac下,进入bin目录,./jmeter来启动程序

启动后,如果是windows/mac,会有gui界面
Jmeter操作界面1

CMD窗口的提示信息

================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use NON GUI Mode:
   jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
   Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================

上面的意思就是:不要使用GUI运行压力测试,GUI仅用于压力测试的创建和调试;执行压力测试请不要使用GUI。使用下面的命令来执行测试:

jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]

更改语言为中文

官方默认为我们提供了简体中文。通过 【Options】->【Choose Language】变更为简体中文

创建测试

  1. 创建线程组
    在“测试计划”上右键 【添加】–>【Threads(Users)】–>【线程组】。
    Jmeter操作界面3
    设置线程数和循环次数。我这里设置线程数为500,循环一次。
  2. 配置元件
    在我们刚刚创建的线程组上右键 【添加】–>【配置元件】–>【HTTP请求默认值】。
    Jmeter操作界面4
    配置我们需要进行测试的程序协议、地址和端口
    Jmeter操作界面5

    当所有的接口测试的访问域名和端口都一样时,可以使用该元件,一旦服务器地址变更,只需要修改请求默认值即可。

  3. 构造HTTP请求
    在“线程组”右键 【添加-】->【samlper】–>【HTTP 请求】设置我们需要测试的API的请求路径和数据。我这里是用的json
    Jmeter操作界面6
  4. 添加HTTP请求头
    在我们刚刚创建的线程组上右键 【添加】–>【配置元件】–>【HTTP信息头管理器】。
    因为我要传输的数据为json,所以设置一个 Content-Type:application/json
    Jmeter操作界面7
  5. 添加断言
    在我们刚刚创建的线程组上右键 【添加】–>【断言】–>【响应断言】。
    根据响应的数据来判断请求是否正常。我在这里只判断的响应代码是否为200。还可以配置错误信息
    Jmeter操作界面8
  6. 添加察看结果树
    在我们刚刚创建的线程组上右键 【添加】–>【监听器】–>【察看结果树】。
    直接添加,然后点击运行按钮就可以看到结果了。
    Jmeter操作界面9
  7. 添加Summary Report
    在我们刚刚创建的线程组上右键 【添加】–>【监听器】–>【Summary Report】。
    直接添加,然后点击运行按钮就可以看到结果了。
    Jmeter操作界面10
  8. 测试计划创建完成
    记得点保存。

执行测试计划

前面我们说过,执行测试计划不能用GUI,需要用命令行来执行。
我这里执行的命令为:

jmeter -n -t testplan/RedisLock.jmx -l testplan/result/result.txt -e -o testplan/webreport

说明:
testplan/RedisLock.jmx 为测试计划文件路径
testplan/result/result.txt 为测试结果文件路径
testplan/webreport 为web报告保存路径。
Web报告如下:
Jmeter操作界面11

这里参考了使用 JMeter 进行压力测试

写在最后

如果需要在centos下进行压测,需要现在windows或者mac下,通过GUI配置好后,保存测试计划文件,然后把测试文件上传到centos,在centos里执行压测命令

jmeter -n -t testplan/RedisLock.jmx -l testplan/result/result.txt -e -o testplan/webreport