jmeter 压测数据库


当前版本:

  • jmeter 5.6.3
  • mysql 5.7.39

简介

    JMeter 是一个开源的 Java 应用程序,主要用于进行性能测试和负载测试。它支持多种协议,包括但不限于 HTTP、HTTPS、FTP、JDBC 以及各种 Web Services。对于数据库的压力测试可以使用 JDBC 协议与数据库进行通信。

        

文章目录如下

1. 怎么实现高并发

2. 配置压测的基本流程

2.1. 设置线程组

2.2. 配置数据库连接串

2.3. 构造简单业务

2.4. 配置监听器

2.5. 执行测试

3. 业务并发分配


        

1. 怎么实现高并发

jmeter 通过如下组件来构造高并发:

线程组    # 模拟多个并发用户
JDBC Connection Configuration  # 配置数据库连接信息
JDBC Request  # 构造业务

通过如下监听器来查看性能指标

聚合报告    # 查看整体性能指标
jp@gc - Response Times Over Time  # 查看响应时间走势图表
jp@gc - Transactions per Second   # 查看吞吐量走势图表

        

在压测过程中,一般采用逐步增长并发数的方案来确定程序的承受能力:

  1. 首先确定吞吐量不低于多少,或者响应时间不高于多少。
  2. 确定需求后开始测试,第1次压测线程数设置与cpu数量相同。例如128,压测过程中检查吞吐量走势是否存在波动或下降的趋势。如果存在下降的趋势检查硬件是否出现瓶颈,检查数据库慢SQL原因。
  3. 如果第1次压测没有性能下跌,那么加大并发数。并发数以成倍数增长,比如第1次并发128,那么第2次256、第3次512,直到出现性能下跌或超出要求的吞吐量。
  4. 如果硬件和业务已经没有优化点了,那么我们只需要加压即可。例如要求达到10w吞吐量,检测程序的最大压力。如果配置的128并发吞吐量达到20w,那么可以持续加压,直到吞吐量只有10w。假如压测2000个并发持续1小时吞吐量都能平稳在10w,则表示符合要求,那么程序10w吞吐量的最大压力可达到2000个用户并发。

        

数据库的详细配置见另一篇文章:

https://blog.csdn.net/m0_61066945/article/details/135829691

        

性能监听器下载地址:

https://jmeter-plugins.org/downloads/old/

将下载的两个zip包解压后,找到 JMeterPlugins-Standard.jar 和 JMeterPlugins-Extras.jar,放到 jmeter\lib\ext\ 下,重启 jmeter 生效。

        

2. 配置压测的基本流程

2.1. 设置线程组

  • 右击测试计划 → 添加 → 线程(用户) → 线程组

我的笔记本性能差,所以只设定了10个线程

        

2.2. 配置数据库连接串

  • 右击测试计划 → 添加 → 配置元件 → JDBC Connection Configuration

"""MySQL"""
URL:jdbc:mysql://[IP]:[端口]/[数库名]  # jdbc:mysql://localhost:3306/mysql
Driver:com.mysql.jdbc.Driver
"""Oracle"""
URL:jdbc:oracle:thin:@[IP]:[端口]:[数库名]  #jdbc:oracle:thin:@localhost:1521:orcl
Driver:oracle.jdbc.OracleDriver
"""PostgreSQL"""
URL:jdbc:postgresql://[IP]:[端口]/[数库名]  # jdbc:postgresql://localhost:5432/postgres
Driver:org.postgresql.Driver

        

2.3. 构造简单业务

  • 右击线程组 → 添加 → 取样器 → JDBC Request

简单的读语句(仅举例)

简单的写语句(仅举例)

        

2.4. 配置监听器

  • 右击线程组 → 添加 → 监听器 → 聚合报告
  • 右击线程组 → 添加 → 监听器 → jp@gc - Response Times Over Time
  • 右击线程组 → 添加 → 监听器 → jp@gc - Transactions per Second

监听器主要开启 "聚合报告"、"吞吐量走势" 和 "响应时间走势",对于 "查看结果树" 不建议配置。因为压测过程中业务会持续运行,在这期间开启 "查看结果树" 会不断返回响应信息,这对压力机的内存消耗很大。一般在保证错误率为0后,都会将 "查看结果树" 注释。

配置案例如下:

        

2.5. 执行测试

点击启动按钮

        

压测结束后先查看聚合报告

    上图聚合报告输出的2行数据,这两行分别是自定义的 select 业务和 insert 业务。我们主要关心这几个指标:平均响应时间、95%响应时间、异常率、吞吐量。

    响应时间以 ms 为单位,从上图看 select 业务95%响应时间为 164ms。这是因为业务非常简单,所以响应比较快,总的来说可以接受。insert 业务95%响应时间为 26ms,比 select 业务快6倍左右,这也是业务简单,所以响应较快。

    吞吐量就是我们常说的TPS/s,每秒执行完成多少个事务。这里的吞吐量只有 113,是因为机器本身的原因(性能差)。mysql官网压测的tpc业务吞吐量能够达到n万每秒,所以不要参考我这里的值。

        

检查完整体性能后再来看看响应时间的走势

如上图,insert 业务整体的响应时间走势相对平稳,这是符合预期的。而 select 业务的响应时间持续增长,这显然不符合预期。这种情况下需要考虑2点:

  1. 硬件瓶颈:根据硬件瓶颈情况优化
  2. 业务问题:设计不合理

我这里是属于第2种情况,业务设计不合理。select 业务为:

SELECT * FROM t1;

由于使用 * 输出全部结果,随着 inser 业务持续运行会导致表数据越来越大,所以查询返回的行数越来越多,消耗内存也就越来越多,响应时间也就持续增长。

我这里只是为了举个例子,与真实业务差距很大,所以"业务"并不具备参考性。

        

吞吐量走势图如下:

吞吐量的走势与响应时间是相对的,每个业务耗时越长,那么每秒能够完成的事务就会更少,所以吞吐量就会持续下跌。

        

3. 业务并发分配

jmeter 的线程数是由线程组设定的,所以我们通过创建多个线程组来分配不同业务的并发数。例如:读写业务占比 7:3

我笔记本性能差,总共10个线程,所以直接给读业务7、写业务3。

        

需要注意:监听器报告要与线程组平级,如果只放在某个线程组下面则只会统计这1个线程组的信息

        

来看一下压测后的结果

【线程分布】读写 7:3

【吞吐量】读业务高于写业务

【聚合报告】读业务高于写业务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/409853.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

字符函数和字符串函数(C语言进阶)(二)

目录 前言 1.4 strcmp 1.5 strncpy strncat strncmp 1.6 strstr 前言 C语言中对字符和字符串的处理是很频繁的,但是c语言本身是没有字符串类型的,字符串通常放在常量字符串中或着字符数组中。 字符串常量适用于那些对它不做修改的字符串函数。 1…

matlab新能源汽车三自由度操纵稳定性分析及优化

1、内容简介 略 可以交流、咨询、答疑 55-新能源汽车三自由度操纵稳定性分析及优化 2、内容说明 略 摘 要 电动化是节能减排、寻求替代能源的最佳途径,已成为行业共识,论文基于江西科技学院桑塔纳轿车油改气项目,在拆除发动机、变速…

低功耗设计——门控时钟

1. 前言 芯片功耗组成中,有高达40%甚至更多是由时钟树消耗掉的。这个结果的原因也很直观,因为这些时钟树在系统中具有最高的切换频率,而且有很多时钟buffer,而且为了最小化时钟延时,它们通常具有很高的驱动强度。此外&…

ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(三)

在人工智能成为我们日常互动中无处不在的一部分的时代,与大型语言模型(llm)有效沟通的能力是无价的。“良好提示的26条原则”为优化与这些复杂系统的交互提供了全面的指导。本指南证明了人类和人工智能之间的微妙关系,强调清晰、专一和结构化的沟通方法。…

matlab绘制雷达图和二维FFT变换图

1、内容简介 略 49-可以交流、咨询、答疑 matlab绘制雷达图和二维FFT变换图 NMO组及NORMAL组 RNFL层、GCL层、IPL层、GCC层、ORL层做雷达图(共10张) 2、内容说明 略 NMO组及NORMAL组 RNFL层、GCL层、IPL层、GCC层、ORL层请分别做雷达图&#xff08…

YOLOv8改进 | Conv篇 | 全新的SOATA轻量化下采样操作ADown(参数量下降百分之二十,附手撕结构图)

一、本文介绍 本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的ADown模块来改进我们的Conv模块,其中YOLOv9针对于这个模块并没有介绍,只是在其项目文件中用到了,我将其整理出来用于我们的YOLOv8的项目,经过实验我发现该卷积模块(作为下采样模块)…

QT DAY4 事件

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);speecher new QTextToSpeech(this); }Widget::~Widget() {delete ui; }//显示系统时间 void Widget::timerEve…

栈和堆什么意思,Rust所有权机制又是什么

栈和堆什么意思 栈:存储基本数据类型和引用数据类型的指针引用(地址),基本数据类型占据固定大小的内存空间。 堆:存储引用数据类型的值,引用数据类型包括对象,数组和函数,在堆中,引用数据类型…

8k中英双语文本嵌入模型效果初探

一 模型介绍 向量模型用于生成向量表示,被广泛应用于检索、分类、聚类或语义匹配等传统的自然语言处理任务。到了大模型时代,由于上下文长度的限制,需要压缩、存储和查询大量的信息,这就需要用到向量模型对输入的文本进行向量化表…

HTB-Bizness

一、信息收集 访问ip自动跳转域名,host绑定域名后访问 目录爆破 有一个登录目录,访问发现是apahce ofbiz登录页面 发现存在漏洞 二、漏洞利用 在github上找到了图形化利用工具 使用工具反弹shell 得到flag 三、权限提升 从本地利用python开启http服务…

项目解决方案:街道社区视频监控接入、汇聚和联网设计方案

目 录 一、客户需求 二、网络拓扑图 三、方案描述 四、系统配置 1、服务器配置 2、带宽配置 五、方案优势 1. 平台可堆叠使用 2. 支持主流接入协议 4. 多种终端显示 5. 客户端功能强大 6. 一机一档 一、客户需求 1,一个街道有十个社…

迷你世界寻找火山脚本附带雪山

print("寻找火山雪山\n星空露珠工作室制作") local blockbing120 --冰山 local blockhuo124 -- 火山 local bing{} local huo{} local m,n0,0 local ra0 local run0 local function o(e) if run-1 then return end run-1 local objide.eventobjid--点击方块的玩家 lo…

【python】0、超详细介绍:json、http

文章目录 一、json二、http2.1 json 读取 request 序列化 三、基本类型3.1 decimal 四、图像4.1 颜色格式转换 一、json import json f open(data.json) # open json file data json.load(f) # 读出 json object for i in data[emp_details]: # 取出一级属性 emp_details, …

二蛋赠书十六期:《高效使用Redis:一书学透数据存储与高可用集群》

很多人都遇到过这么一道面试题:Redis是单线程还是多线程?这个问题既简单又复杂。说他简单是因为大多数人都知道Redis是单线程,说复杂是因为这个答案其实并不准确。 难道Redis不是单线程?我们启动一个Redis实例,验证一…

Spring定时任务--手动执行定时任务(替代@Scheduled)

原文网址:Spring定时任务--手动执行定时任务(替代Scheduled) 简介 本文介绍SpringBoot如何手动执行定时任务。 之前此文已经介绍过,直接用Scheduled即可使用Spring的定时任务,但有时需要手动去提交定时任务&#xf…

解决MySQL安装server时报被什么需要问题

bug: 执行这个四个命令的时候,最后一个server报错,显示被需要 rpm -ivh mysql-community-common-5.7.35-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.35-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.35-1.el7.x86_64.rpm rpm -ivh mysql-comm…

深入理解Java中的Reader类:一步步剖析

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好…

【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)

一、Qt Designer简介 Qt Designer是PyQt程序UI界面的实现工具,可以帮助我们快速开发 PyQt 程序的速度。它生成的 UI 界面是一个后缀为 .ui 的文件,可以通过 pyiuc 转换为 .py 文件。 Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面…

Linux安装Mysql设置自启动失败,bugFailed to execute operation: No such file or directory

bug: [rootlocalhost mysql-5.7]# systemctl enable mysql.service Failed to execute operation: No such file or directory 出现bug原因: ①CentOS7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和…

Python 程序基础

计算机组成原理 计算机组成 计算机硬件通常由以下几部分组成: 中央处理器(CPU):负责执行计算机指令,完成各种计算和逻辑操作。存储器(Memory):用于存储计算机执行程序所需的数据和…