欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

wrk性能测试实践-Mybatis支持MySQL服务

程序员文章站 2022-04-10 09:50:56
MyBatis简介:MyBatis 是一款优秀的Java持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的XML或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。特别适合分布式和大数据网络数据库的编程。测试需求:针对MyBatis插件支持MySQL数据库字段加解密功能,使用http性能基准测试...

MyBatis简介:

MyBatis 是一款优秀的Java持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的XML或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。特别适合分布式和大数据网络数据库的编程。

测试需求:

针对MyBatis插件支持MySQL数据库字段加解密功能,使用http性能基准测试工具wrk,对MyBatis考虑加密与不加密两种对比场景下,数据库数据插入功能的性能;验证数据通过主键查询功能的性能;验证数据通过字段索引进行查询的性能。

测试环境架构:

wrk性能测试实践-Mybatis支持MySQL服务

wrk测试脚本自动化

使用wrk进行http性能测试,难点主要在以下两个方面:

  1. lua脚本的编写,尤其是需要构造复杂的请求或者嵌套格式的参数;

  2. 确定wrk命令的最优参数,包括线程数、连接数和吞吐量。

    在测试过程中,参数的设定对测试结果的好坏有直接的影响,一般情况下,是通过多次调试的方法确定参数的合理区间,而要在3个参数之间找到最佳的平衡,所需要的工作量较大,甚至会出现当一个参数的最优并不是其他参数的最优,这就需要测试人员反复尝试,对测试人员的耐性是个很大的考验。
    本文作者依据多次的测试场景,总结出一套参数调试经验,开发一个常用的参数调试自动化脚本,可以帮助测试者快速定位最佳的wrk参数,以获取到最优的性能指标:QPS、延时时间

1 参数设定的原则

  1. 线程数:-t ,一般是依据cpu核数来设定,最大值不要超过2倍cpu核数。
  2. 连接数:-c, 可以理解为并发数,连接数需要在测试过程中多次调试,找到QPS达到最大临界点时的最大并发量;由于服务都有自身的负载极限,也会出现连接数越大QPS越低的情况,这种情况是因为连接数设置的过高,导致待测系统超出自身能承受的负载。
  3. 吞吐量:-R,是每个线程每秒完成的请求数,这个数值是wrk2必带的一个参数,在测试过程中也是需要测试人员多次调试,通过不断上调其数值,测试出QPS的临界值及保证服务可用的时延。

2 测试脚本优化

测试步骤:
  1. 使用curl命令验证接口的可用性: curl -H “Content-Type:application/json” -X POST
    -d @add.json “url”

  2. 获取系统cpu核数,cat /proc/cpuinfo |grep “processor”|wc -l

  3. 手动调试确定连接数和吞吐量的最优区间范围,命令格式为: wrk -t 32 -c500 -d
    15s -R9000 --latency “url” --script=add.lua

基于以上获取的值,编写测试脚本,如下:
wrk_getSearch.sh

#!bin/bash
url= "https://www.baidu.com/"
thread= $(cat /proc/cpuinfo |grep "processor"|wc -l)

connections = (500 550 600 700)
rate= ( 8000 8500 9000 9500 10000 15000 20000) 

for r in ${rate[@]}
do 
	echo "wrk -t $thread -c 600 -d 10s -R $r $url " >>search.log
	for i in {1..3}
	do
		wrk -t 16 -c 600 -d 10s -R $r $url >>search.log;
		sleep 10;
	done
done 

执行脚本之后,通过log日志,记录不同参数下的QPS和lantency的结果,比如下表所示:

Rate参数值设定 QPS latency
5000 4985 4.45ms
6000 5973 4.75ms
7000 6965 5.11ms
8000 7934 6.14ms
9000 8940 7.03ms
10000 9855 9.05ms
11000 10900 11.55ms
12000 11900 18.55ms
13000 12865 30.41ms
15000 13825 340ms

从以上数据可以看出,在连接数最优情况下,随着rate参数值的升高,QPS和lantecy的值也在增加,但是在最大QPS为13000时,latency的值也很大,从系统稳定性角度考虑,当rate为10000时,此时lantency的值为10ms,则最优的rate参数为10000。

本文地址:https://blog.csdn.net/ccccsy99/article/details/107370399