性能测试:数据库连接池问题分析

2023-05-16

前言
今天我们来压测一个支付的接口,10个并发,压测5分钟。下面我们可以看到tps大概在200多,响应时间在40ms左右。
在这里插入图片描述下面我们来看一下服务器的性能,应用服务器的cpu使用率大概在60%左右。在这里插入图片描述再来看一下数据库服务器,数据库服务器的性能还算正常,cpu使用率大概在25%左右,而且我们支付的接口,还是在做一个写库的操作,下单的时候,会往订单表中插入数据。在这里插入图片描述并且我们不断加压,新增并发,cpu仍然没有大概100%,tps也没有新增,响应时间整体越来越长。通常这种现象我们应该怎么排查呢?

可以从下面两方面来排查:

  • 查看具体程序中哪个函数对于cpu的消耗是较高的
  • 关注线程情况

下面我们使用 jprofiler ,我们来看一下hotspots,前两个主要是关于jdk和tomcat底层的,我们可以不用管,下面这个是关于数据库相关的操作,因为我们现在压测的接口,会涉及到写库的操作,所以他会对我们的sql进行编译。那么我们从这个角度来看,这个对与cpu的消耗都是正常的,主要是对sql的执行和编译。
在这里插入图片描述
下面我们再来看一下GVM。主要是看内存,内存这一块想对还是平稳的,没有看出有内存溢出的趋势。
在这里插入图片描述
GC 的话,也没有看出太多的异常。
在这里插入图片描述
我们再来看看线程,里面可以看到有一些线程存在阻塞的现象。但是阻塞时间想对来说比较短暂,我们可以先做一个堆栈信息的打印查看一下具体的情况。在这里插入图片描述
我们使用如下命令,打印堆栈信息:

1|jstact pid >test.log   // pid 为tomcat的进程id

在堆栈信息中,我们可以看到文件中,有大量线程都处于TIME_WATING的状态。在这里插入图片描述
我们这里可以看到有一个关键字 druid,这个是数据库的连接池,我们可以看到有大量的连接池处于等待的状态。在这里插入图片描述
下面我们来查看数据库最大连接数:

1|show variables like '%connections%';

我们可以看到数据库最大连接数默认情况下,是151;这个值我们可以进行修改,但是一般通常情况下不建议修改的太大,一般公司通常是配置在800-1000;因为数据库本身不适合搞太大的连接数,前面我们才10个并发,5个并发数,cpu就已经被压的非常高了。在这里插入图片描述查看当前和数据库建立的连接数:

1|show status like '%thread%';

在这里插入图片描述

  1. Threads_cached:线程缓存内的线程数量
  2. Threads_connected:当前打开的连接数量
  3. Threads_created:创建的线程数
  4. Threads_running:

我们可以看到上方的数据,当前建立的连接数只有Threads_connected 6个。而我们最大的连接数默认有151个,那就说明并没有达到最大值,说明是我们连接池的问题。

下面我们再来看一下连接池的配置,可以看到我们最大活动连接数只有5个,这个有点低,这里改成50,一般建议不要设置太大。修改了配置文件之后,需要重启tomcat。
在这里插入图片描述
下面是关于数据库连接池配置的一些建议:

  • initialSize:对于 db 规模不是特别大的情况下可考虑设置为 1-5个。避免启动时间过长,以及没有业务时占用过多的数据库连接资源
  • minIdle:可考虑该值的设置和初始化连接保持一致;
  • maxActive 最大连接不要设置过大,避免本地维护的 db 太大。 如果对应到数据源的并发数过高,可考虑增大最大连接数。一般设置
    20-50 比较合理
  • maxWait:获取连接的超时时间:如果连接全部被占用,需要等待的时间。可以根据当前系统的响应时间判定,如果容忍度较高,可以大点。容忍度较低,设置小点。一般设置
    5000-10000

那么我们修改配置之后,再来进行压测。可以看到tps大概在900左右,响应时间在15ms左右。
在这里插入图片描述
我们可以使用如下命令查看端口的使用情况。

1|netstat -anp | grep 3306 | grep  114.55.34.236 | wc -l
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

性能测试:数据库连接池问题分析 的相关文章

  • 性能需求指标

    通常我们都从两个层面定义性能场景的需求指标 业务指标和技术指标 性能测试行业常用的性能指标表示法 TPS 每秒事务数 T没有规定 所有相关的人都要知道你的 T 是如何定义的 通常情况下 我们会根据场景的目的来定义 TPS 的粒度 如果是接口
  • 资深测试老鸟整理,性能测试-常见调优详细,卷起来...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • Python web自动化测试 —— 文件上传

    文件上传三种方式 一 查看元素标签 如果是input 则可以参照文本框输入的形式进行文件上传 方法 和用户输入是一样的 使用send keys 1 2 3 4 5 步骤 1 找到定位元素 2 输入文件路径 ele driver find e
  • 性能测试_Day_10(负载测试-获得最大可接受用户并发数)

    目录 如何理解负载测试 如何实现负载测试 jpgc Standard Set插件安装 jpgc Standard Set使用方法 负载测试分析指标 获得最大可接受用户并发数 区间值 负载测试分析指标 获得最大可接受用户并发数 真实值 负载测
  • JMeter入门教程(13) --事务

    文章目录 1 任务背景 2 任务目标 3 任务实操 3 1 1 事务控制器 3 2 2循环控制器 1 任务背景 JMeter中的事务是通过事务控制器实现的 为了衡量服务器对某一个或一系列操作处理的响应时间 需要定义事务 下面我们详细介绍在J
  • 性能测试如何做?从0到1性能测试实战(手把手教)

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • 性能测试连载 (10)-数据错误率分析

    概述 性能测试脚本跑完了之后 我们除了要收集瓶颈数据 还有分析错误数据 通常一套脚本跑完 错误类型不止一种 但是jmeter只会在聚合报告里面给出一个总体的错误率 错误率 jmeter里的错误率是如何统计的 在返回的数据里面 只要succe
  • 性能测试场景设计之负载场景

    负载场景 文章目录 负载场景 一 什么是负载测试 二 负载测试场景设计 1 阶梯式加压 插件 jpgc Standard Set 结果 2 第二张阶梯式 Concurrency Thread Group 结果 分析 提示 以下是本篇文章正文
  • 软件测试终极难题:先学性能测试还是先学自动化测试?

    应该先学性能 还是应该先学自动化 这个问题是很多想要提升的人都会比较犹豫的 因为不知道怎么学更好 更合适 那今天我们就来给大家讲讲这个问题 在选择这两个方向的时候 我们应该先明确测试方法都是做什么的 性能测试首先我们是要解决这个软件功能已经
  • Redis缓存知识-穿透、击穿、雪崩

    目录 一 Redis介绍 二 Redis做缓存服务器 三 缓存穿透 击穿 雪崩 1 缓存穿透 2 缓存击穿 3 缓存雪崩 大家好 我是杨叔 每天进步一点点 关注我的微信公众号 程序员杨叔 获取更多测试开发技术知识 今天分享的内容是 Redi
  • Linux统计物理cpu、逻辑cpu

    物理cpu个数 grep physical id proc cpuinfo sort uniq wc l 每个物理cpu的核心个数 grep cpu cores proc cpuinfo uniq awk F print 2 每个物理cpu
  • 性能测试常见指标有哪些

    性能测试的常见指标包括 1 响应时间 Response Time 用户发送请求到系统返回结果所花费的时间 2 吞吐量 Throughput 单位时间内系统处理的请求数量 通常以每秒请求数 SPS或TPS 表示 3 并发用户数 Concurr
  • prometheus的介绍&环境搭建配置服务启动监控

    一 prometheus的介绍 环境搭建配置 1 prometheus grafana构成 2 功能简介 Prometheus是一个开源监控系统 它前身是SoundCloud的警告工具包 主要具有如下功能 多维 数据模型 时序由 metri
  • loadrunner agent process进程

    LoadRunner Agent Processer是LR的代理进程 有很大的用处 比如当一台机器要分担一定 负载的时候 这个LoadRunner Agent Processer是必须启动的 在LR安装后一般是开机启动的 可以关掉 就象个地
  • 3. 性能测试之目标评估

    文章目录 前言 一 模型1 根据日活计算目标QPS 1 原则 2 事例 二 模型2 根据压测数据评估最大支撑并发 1 原则 2 事例 3 备注 三 模型3 根据压测数据评估服务器资源 1 策略 2 备注 四 模型4 评估用户并发或峰值并发
  • Appium 实现一个 apk 的二级页面的点击操作

    前言 在本文中 我们将介绍如何使用 Appium 和 Python 来实现一个 apk 的二级页面的点击操作 用例目标 实现一个 apk 的二级页面的点击操作 初始思路 进入到该界面的直接点击该 button 即可 遇到问题 1 启动不起来
  • JMeter入门教程(10) --函数助手

    文章目录 1 CSVRead 2 Random 3 RandomString 4 RandomDate 5 time 在JMeter的选项菜单中有一个 函数助手对话框 点击打开 函数助手 对话框 使用函数助手 我们可以从 选择一个功能 下拉
  • 一文1000字彻底搞懂Web测试与App测试的区别

    总结分享一些项目需要结合Web测试和App测试的工作经验给大家 从功能测试区分 Web测试与App测试在测试用例设计和测试流程上没什么区别 而两者的主要区别体现在如下几个方面 1 系统结构方面 Web项目 B S架构 基于浏览器的 Web测
  • Jmeter 课程笔记(五)集合点、思考时间和三种断言

    添加集合点 Http请求 右键 定时器 Synchronizing Timer Numberb of Simulated Users to Group by 并发用户数量 默认为0则与线程组的线程数一致 Timeout inmillisec
  • 使用ADB命令来测试Android手机App的耗电量

    1 使用WiFi连接手机 先使用USB数据线连接手机和电脑 手机和电脑连接同一个WiFi 启动端口服务 adb tcpip 5555 5555为端口号 可以自由指定 打印 restarting in TCP mode port 5555 表

随机推荐

  • 关于checksum校验和算法

    今天复习计网的时候看到了UDP头部有差错校验 xff0c 其中的checksum算法没理的太清楚 xff0c 索性写一篇博客 xff0c 顺便回顾一下其他的 校验和覆盖的内容 xff1a IP校验和 xff1a IP首部 ICMP校验和 x
  • 在gazebo中添加力传感器

    前言 在机器人仿真中 xff0c 使用了力传感器 xff0c 因此需要在gazebo中添加对应的传感器 URDF编辑 力传感器需要添加在关节上 xff0c 虽然号称可以添加在杆件上 xff0c 但是会报错 http gazebosim or
  • ROS下使用D435识别AR码

    前言 在ROS Kinetic下使用Inter realsense D435 xff0c 结合ar track alvar功能包 xff0c 实现AR码的识别与定位 说明 借鉴胡春旭老师的launch文件进行改写 1 主要修改红框部分 需要
  • 【持续更新】ROS中的各种有意思的功能包

    0 BG ROS中有很多开源package xff0c 在很多方面做了有意思的工作 xff0c 本文旨在记录一些平常看到的功能包 xff0c 为方便后续有人使用和查找 文章目录 0 BG1 数据转换类别1 1 LaserScan转换到Poi
  • 刷LeetCode过程中的一点心得

    重要 重要 重要 xff01 xff01 xff01 先不要刷hard的 xff0c 先把简单的和中等刷几遍 然后有时间在刷hard的 xff0c 因为面试的时候不一定问道hard啊 xff0c 好尴尬 在刷LeetCode的过程中的一点心
  • The file Tomcat.exe was not found... Either the CATALINA_HOME environment variable is not defin

    window下安装tomcat后报错 The file Tomcat exe was not found Either the CATALINA HOME environment variable is not defined correc
  • 一文读懂Focalloss

    最近有人问我focalloss是什么原理 xff0c 看不懂 xff0c 大多数网文看了还更朦胧 xff0c 于是我抽空整理了一篇文章帮助大家理解 Focal loss解决了什么问题 xff1f 降低易分样本权重 增加难分样本的权重训练 对
  • Linux集成环境部署tomcat+redis

    Linux环境部署 tomcat 43 redis Tomcat 安装配置Redis安装配置 Tomcat 安装配置 下载tomcat安装包 xff0c 将安装包上传至自己的linux服务器中 xff0c 将安装包传到linxu环境中的 u
  • docker部署监控: prometheus + Grafana(超详细)

    前言 之前我们有用到top free iostat等等命令 xff0c 去监控服务器的性能 xff0c 但是这些命令 xff0c 我们只针对单台服务器进行监控 xff0c 通常我们线上都是一个集群的项目 xff0c 难道我们需要每一台服务器
  • mysql存储过程实现同时多表写入,构造创建商品数据

    前言 通常在做性能测试的过程中 xff0c 我们需要构造一下性能测试数据 xff0c 有些可以通过调用API xff0c 直接构造数据 xff0c 但是可能会存在一些场景 xff0c 需要我们直接在数据库中插入数据 xff0c 通常我们对于
  • MySQL修改root密码的多种方法,你掌握了吗

    前言 我们在工作中都会用到mysql数据库 xff0c 也是最熟悉用的最多的 xff0c 无论是在本地安装mysql还是在Linux安装mysql xff0c 都需要给数据库配置用户名和密码 xff0c 时间一长我们就会忘记配置数据库的密码
  • 性能测试:数据库架构和SQL优化

    前言 有时候我们出去面试的时候 xff0c 会被问到是否有做过架构方面的优化 如果没有准备突然被问到的话通常会有点懵 那么我们这里来整理一下系统架构优化相关的知识 其实一般架构优化主要就分为数据库架构 xff0c 第二个就是应用程序架构 数
  • springboot整合mybatis实现增删改查

    前言 在学习Springboot过程中 xff0c 整合mybatis框架实现表数据的增删改查 xff0c 话不多说 xff0c 开始贴代码 xff01 Spring Boot提供了一个名为spring boot starter paren
  • 国内个人免费在SCI、IEEE等数据库下载文献方法

    膜拜CSDN上的大神们 xff0c 在技术和方法上为我们奉献的力量 xff01 xff01 xff01 xff01 1 打开IEEE官网 xff1a https ieeexplore ieee org Xplore home jsp 用英文
  • springboot读取yml文件中的list列表、数组、map集合和对象

    前言 springboot配置文件yml类型简单的风格 xff0c 十分受大家的欢迎 xff0c 支持字符string类型 xff0c 支持列表list类型 xff0c 支持集合map类型 xff0c 支持数组array类型 xff0c 支
  • JMeter 线上压测如何预防服务器被打挂

    通常我们在做线上压测的时候 xff0c 会遇到一个问题 xff0c 就是担心在线上压测的时候服务器被我们压挂掉 xff0c 由于是线上服务器 xff0c 挂掉之后再重启 xff0c 会比较麻烦 xff0c 因此 JMeter 提供了一个方法
  • JMeter 进行函数助手MD5加密

    JMeter 函数助手 MD5 加密 JMeter函数助手中 xff0c 提供了MD5加密的方法 xff0c 如图所示 xff0c 我们将内容 123456 进行加密 xff0c 可以看到加密成功了 下面我们来看看项目接口的请求参数 这是一
  • mysql监控sql执行情况

    要想进阶针对mysql学习乃至掌握mysql调优的基本技能 xff0c 监控mysql的执行情况必不可少 就像我们的代码 xff0c 如果不能debug xff0c 想要进行调优排错 xff0c 难度将会大大增加 所以今天我们就来讲解如何监
  • Linux搭建JMeter环境(超详细)

    安装JDK 官网链接 xff1a https www oracle com java technologies javase javase jdk8 downloads html 因为我虚拟机配置是arm xff0c 安装 Linux环境下
  • 性能测试:数据库连接池问题分析

    前言 今天我们来压测一个支付的接口 xff0c 10个并发 xff0c 压测5分钟 下面我们可以看到tps大概在200多 xff0c 响应时间在40ms左右 下面我们来看一下服务器的性能 xff0c 应用服务器的cpu使用率大概在60 左右