SpringBoot优化连接数的方法详解

 更新时间:2023年06月08日 08:46:05   作者:中呗  
SpringBoot开发最大的好处是简化配置,内置了Tomcat,下面这篇文章主要给大家介绍了关于SpringBoot优化连接数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

由于springboot内置web容器是Tomcat,所以我们在使用springboot时,如果内置Tomcat参数不满足要求时,可按需优化。
SpringBoot内置Tomcat,在默认设置中,Tomcat的最大线程数是200,最大连接数是10000。支持的并发量是指连接数,也就是说 支持最大并发量是一万(默认)。

Tomcat有两种处理连接的模式,

1,是BIO,一个线程只处理一个Socket连接,

2,是NIO,一个线程处理多个Socket连接。

由于HTTP请求不会太耗时,而且多个连接一般不会同时来消息,所以一个线程处理多个连接没有太大问题。一个线程处理多个连接数会很慢 有可能会超时。

springboot 配置Tomcat参数:

server:
  tomcat:
    accept-count: 80 #挂起的请求队列最大连接数,默认100
    max-connections: 2000  #最大连接数,默认10000,tomcat内tcp连接池的大小
    max-threads: 200 #最大线程数,默认200,超过加入等待队列,默认是100,当等待队列达到100后,直接拒绝此次请求返回connection refused。连接超时时间默认为20秒
    min-spare-threads: 5  #最小工作线程数
    connection-timeout: 60000  #server端的socket超时间,默认60s
    accesslog:
      enabled: true #启动tomcat访问日志

静态内部类Accesslog:主要用于配置Tomcat访问日志的参数信息:

  • enabled:是否启用访问日志
  • pattern:访问日志的格式化模式,默认为common
  • directory:创建日志文件的目录。可以是绝对或相对于Tomcat的基目录,默认是logs
  • prefix:日志文件名称前缀,默认access_log
  • suffix:日志文件名称后缀,默认.log
  • rotate:是否启用访问日志旋转,默认为true
  • renameOnRotate:是否推迟将日期戳包含在文件名中
  • fileDateFormat:日志文件名称中的日期格式,默认为.yyyy-MM-dd。
  • requestAttributesEnabled:为请求使用的IP地址、主机名、协议和端口设置请求属性
  • buffered:是否缓冲输出,使其只定期刷新,默认为true

优化完内置Tomcat配置,我们可以按需再优化下数据库连接配置:

查询mysql最大连接数:

show variables like "%max_connections%";

MySQL 最大连接数的默认值是 100,这个数值对于并发连接很多的数据库应用是远不够用的。当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些。在使用 MySQL 数据库的时候,经常会遇到一个问题,就是 “Can not connect to MySQL server. Too many connections” -mysql 1040 错误,这是因为访问 MySQL 且还未释放的连接数已经达到 MySQL 的上限。通常,MySQL 的最大连接数默认是 100,,最大可以达到 16384。

常用的修改MySQL最大连接数的两种方式如下:

第一种:命令行修改最大连接数 (max_connections),设置最大连接数为 1000。

set global max_connections = 1000;

这种方式有个问题,就是设置的最大连接数只在 MySQL 当前服务进程有效,一旦 MySQL 重启,又会恢复到初始状态。因为 MySQL 启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对其配置文件做更改。

第二种:通过修改配置文件来修改 MySQL 最大连接数 (max_connections)。

进入 MySQL 安装目录,打开 MySQL 配置文件 my.ini 或 my.cnf 查找 max_connections=100,修改为 max_connections=1000,重启 MySQL 服务即可。

mybatis 的并发上限优化:

spring.datasource.name=druidDataSource
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.1.1:13306/test?useUnicode=true&characterEncoding=utf8&useTimezone=true&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456test
spring.datasource.filters=stat,wall,log4j,config
spring.datasource.max-active=100
spring.datasource.initial-size=1
spring.datasource.max-wait= 60000
spring.datasource.min-idle=1
spring.datasource.time-between-eviction-runs-millis=60000
spring.datasource.min-evictable-idle-time-millis=300000
spring.datasource.validation-query=select 'x'
spring.datasource.test-while-idle=true
spring.datasource.test-on-borrow=false
spring.datasource.test-on-return=false
spring.datasource.pool-prepared-statements=true
spring.datasource.max-open-prepared-statements=50
spring.datasource.max-pool-prepared-statement-per-connection-size=20

总结

到此这篇关于SpringBoot优化连接数的文章就介绍到这了,更多相关SpringBoot优化连接数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java 8 lambda表达式list操作分组、过滤、求和、最值、排序、去重代码详解

    java 8 lambda表达式list操作分组、过滤、求和、最值、排序、去重代码详解

    java8的lambda表达式提供了一些方便list操作的方法,主要涵盖分组、过滤、求和、最值、排序、去重,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • Java利用POI读取、写入Excel的方法指南

    Java利用POI读取、写入Excel的方法指南

    这篇文章主要给大家介绍了关于Java利用POI读取、写入Excel的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • 如何实现java执行kettle并传参数

    如何实现java执行kettle并传参数

    文章主要介绍了在审批成功后如何使用Kettle传递批次号参数并执行KTR文件,同时,提到了所需的主要POM依赖,并强调了个人经验的价值,鼓励大家参考和使用
    2025-01-01
  • btrace定位生产故障的方法示例

    btrace定位生产故障的方法示例

    这篇文章主要介绍了btrace定位生产故障的方法示例,文中通过示例代码介绍的很详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-02-02
  • 如何使用Java实现请求deepseek

    如何使用Java实现请求deepseek

    这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-02-02
  • Idea调用WebService的关键步骤和注意事项

    Idea调用WebService的关键步骤和注意事项

    这篇文章主要介绍了如何在Idea中调用WebService,包括理解WebService的基本概念、获取WSDL文件、阅读和理解WSDL文件、选择对接测试工具或方式、发送请求和接收响应、处理响应结果以及错误处理,需要的朋友可以参考下
    2025-01-01
  • Nacos(SpringBoot)配置加载及刷新方式

    Nacos(SpringBoot)配置加载及刷新方式

    文章主要介绍了NacosConfigAutoConfiguration的配置加载及刷新过程,包括NacosConfigBeanDefinitionRegistrar的注册、NacosPropertySource的处理、自动刷新机制以及NacosValueAnnotationBeanPostProcessor的实现
    2024-12-12
  • Linux中如何修改jar包里的文件类及配置等内容详解

    Linux中如何修改jar包里的文件类及配置等内容详解

    在项目测试或者部署后,经常会遇到需要更改一些配置文件或者java类,这篇文章主要介绍了Linux中如何修改jar包里的文件类及配置等内容的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-12-12
  • Java中实现用户之间的通讯方式

    Java中实现用户之间的通讯方式

    在Java中实现用户间通讯主要有两种方法:Socket编程和WebSocket,Socket编程允许两个设备间进行数据交换,适用于基本的网络通讯,本文提供了两种方法的基本实现代码和相关配置,帮助开发者根据需求选择合适的通讯方式
    2024-09-09
  • Java下载文件的4种方式总结

    Java下载文件的4种方式总结

    这篇文章主要给大家总结介绍了关于Java下载文件的4种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论