Springboot 数据库连接池大小简单总结
最近在进行性能压测, 想验证一下产品的极限性能, 在使用openpower 2路22核(SMT4)176线程 512G内存的服务器上面进行性能压测
压测进行到1000并发或者是2000并发时性能有一定的衰减, 有开发确认, 数据库事务仅是比较短促的OLTP的保存操作, 耗时都比较短 ,
所以在这种情况下, 将数据库连接池的 大小 从2000逐步递减到 350 左右, 性能压测有了一定提高. 并发相应时间从7s 变成了3s 左右, 并且性能比较稳定了.
初步怀疑问题原因在于 较高连接数时 操作系统进行 线程调度时的损耗会比较大,如果设置超多的连接池数据, 并且要求数据库服务器也提高max-connections 数目, 会导致
应用后端的 jvm 内的 connection pool 出现大量的 线程切换, 影响性能, 在数据库端, 如果数据库保持较多的关于客户端的db connection 连接, 也需要进行数据库服务器层面的线程切换.
并且前端时间出现过 jvm 的crash 现象, 怀疑也是在Openpower上面的 openjdk的 jvm 到达 三四千线程之后 容易出现稳定性问题,
在这里一直有一个不太明白的事项:
springboot 里面有两个连接池 一个是为前端http服务的 tomcat http连接池, 这个连接池数量一样可能会要求比较高一些.
虽然数据库事务比较短促, 但是可能需要客户端与应用服务器保持长连接, 应用服务器也需要较长时间的分析客户请求, 访问数据库, 处理数据库返回数据, 打包传递给客户端等步骤, 这些步骤可能需要较长的时间来进行处理.
有时为了安全客户端和应用服务器端还会保持一个keepalive 的通信机制, 定期校验更换token 以保证安全.
刚才看了下 我这边 登录服务器 就产生了 7个tcp连接

可以明显看到 是一个chrome 的进程在处理相关业务

然后在服务器端可以看到有多个连接

然后一段时间不报错就会立马降为 1个 连接 时间大约为1 min
所以怀疑用户并发时可能会占用较多的http连接池.
看到这么一个数据
148 11840 okhttp3.internal.connection.RealConnection
怀疑跟这个数据有点靠近

感觉 http 连接池 比较轻量 也不会占用太多的资源
但是数据库连接池比较 狠一些 数据库需要做相关的 保持状态以及事务处理 所以不能太多
但是发现数据库连接池的大小可能大于实际的物理连接
[root@CentOS8 ~]# echo "当前数据库连接池大小为:" $(jmap -histo `jps |grep caf |awk '{print $1}'` |grep PoolEntry$ |awk '{print $2}')
当前数据库连接池大小为: 89
[root@CentOS8 ~]# lsof -i:5236 |grep 29490 |wc -l
23
这一块理解的不太清楚
只是怀疑这个http 的连接数是 okhttp的 后面再给tomcat 进行处理.
但是tomcat的连接数多少可能需要通过http-nio 才分析.
比较忙 改天再整理
Springboot 数据库连接池大小简单总结的更多相关文章
- Springboot数据库连接池报错的解决办法
Springboot数据库连接池报错的解决办法 这个异常通常在Linux服务器上会发生,原因是Linux系统会主动断开一个长时间没有通信的连接 那么我们的问题就是:数据库连接池长时间处于间歇状态,导致 ...
- java数据库连接池技术简单使用
JDBCDemo.java: package com.itheima.jdbc; import java.sql.Connection; import java.sql.PreparedStateme ...
- SpringBoot集成druid数据库连接池的简单使用
简介 Druid是阿里巴巴旗下Java语言中最好的数据库连接池.Druid能够提供强大的监控和扩展功能. 官网: https://github.com/alibaba/druid/wiki/常见问题 ...
- springboot数据库连接池使用策略
springboot官方文档介绍数据库连接池的使用策略如下: Production database connections can also be auto-configured using a p ...
- springBoot数据库连接池常用配置
在配置文件中添加配置如下(我使用的是多数据源): spring.datasource.primary.url=jdbc\:mysql\://localhost\:3306/test?useUnicod ...
- DBCP数据库连接池的简单使用
0.DBCP简介 DBCP(DataBase connection pool)数据库连接池是 apache 上的一个Java连接池项目.DBCP通过连接池预先同数据库建立一些连接放在内存中( ...
- JDBC 数据库连接池的简单实现
连接池代码: public class MyDataSource2{ private static String url = "jdbc:mysql://localhost:3306 ...
- java web学习总结(十六) -------------------数据库连接池
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- javaweb学习总结(三十九)——数据库连接池
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- JavaWeb学习(三十)———— 数据库连接池
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
随机推荐
- 云图说 | MSSI之应用业务模型ABM,搭建业务与技术的数据治理桥梁
摘要:应用业务模型ABM(Application Business Model)是MSSI为客户提供的统一模型管理服务. 本文分享自华为云社区<[云图说] | 第274期 MSSI之应用业务模型 ...
- 带你认识MindSpore量子机器学习库MindQuantum
摘要:MindSpore在3.28日正式开源了量子机器学习库MindQuantum,本文介绍MindQuantum的关键技术. 本文分享自华为云社区<MindSpore量子机器学习库MindQu ...
- 十大 CI/CD 安全风险(五)
在本篇文章中,我们将了解第三方服务的监管不足,工件完整性验证及日志可见性不足这三个关键 CI/CD 安全风险,并给出缓解相应风险的建议与措施. 第三方服务监管不足 CI/CD 攻击面包括企业资产,例如 ...
- Mac 复制文件名目录路径
Mac快速复制文件路径 在Mac电脑上,我们经常需要复制文件的路径,其实,Mac系统提供了快速复制文件路径的方法.下面我们来详细介绍. 方法一:使用菜单栏 首先,打开Finder,然后选择你要复制路径 ...
- Java 匿名函数的概念和写法
匿名函数的实现 1.定义一个函数式接口.只有一个抽象方法的接口就是函数式接口 //1.定义一个函数式接口.只有一个抽象方法的接口就是函数式接口 interface ILike { void hit(l ...
- 多智能体协同控制研究中光学动作捕捉与UWB定位技术比较
人类在进行任何工作时,总是强调团队合作,teamwork.随着控制科学.计算机科学等多学科的交叉发展与融合,在智能体控制领域,对于单个机器人,无人机,无人车的控制已经不能满足现在领域的技术需求,从而和 ...
- 用Python自动清理系统垃圾,再也不用360安全卫士了
用Python自动清理系统垃圾,再也不用360安全卫士了 在Windows在安装和使用过程中都会产生相当多的垃圾文件,包括临时文件(如:.tmp.._mp)日志文件(.log).临时帮助文件(.gid ...
- 供应链安全情报 | 恶意py包伪装代理SDK进行后门攻击,目标锁定python开发者
概述 2023年11月28号,悬镜供应链安全实验室在Pypi官方仓库(https://pypi.org)监测到两起伪装成http和socks5代理SDK的开源组件投毒事件.python开发者一旦下载安 ...
- C语言基础之基础的输入输出
前言 学一门编程语言,不能编写让用户输入数据然后输出处理后的数据的程序那么就等于没学,而在C语言中可以用printf() 和 scanf() 函数进行输入和输出操作.这两个函数是内置的库函数,定义在 ...
- liunx基础概述
一.liunx起源 1.1991,芬兰研究生Liunus Torvalds编写了liunx的代码,并上传到互联网 2.Liunx基于UNIX,但是有别与UNIX 3.Liunx的软件产品使用了社区开发 ...