SpringBoot项目中通常我们没有处理并发问题,但是使用项目本身还是支持一定的并发量,因为在SpringBoot中内嵌Tomcat容器,而Tomcatspring-configuration-metadata.json文件中设置了关于并发的默认配置:

{"name": "server.tomcat.max-connections","description": "“服务器在任何给定时间接受和处理的最大连接数。","defaultValue": 8192
},
{"name": "server.tomcat.accept-count","description": "当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度。","defaultValue": 100
},
{"name": "server.tomcat.max-http-form-post-size","description": "http使用Post请求时候的表达最大容量。","defaultValue": "2MB"
},
{"name": "server.tomcat.max-keep-alive-requests","description": "在连接关闭之前可以管道化的最大HTTP请求数。","defaultValue": 100
},
{"name": "server.tomcat.threads.max","description": "工作线程的最大数量。","defaultValue": 200
},
{"name": "server.tomcat.threads.min-spare","description": "工作线程的最小数量。","defaultValue": 10
},
{"name": "server.servlet.session.timeout","description": "会话超时。如果未指定持续时间后缀,将使用秒。","defaultValue": "30m"  // 这里m表示分钟,s表示秒
},

在默认配置下:
在默认情况下当连接数超过8192时,就会出现拒绝连接。
最小线程数量为10,最大线程数量为200,等待队列长度设置为acceptCount=100,当可分配的线程数全部用完之后,后续的请求将进入等待队列等待,等待队列满后则拒绝处理。

而这些默认配置可以在配置文件中进行修改,比如:

## 服务器最大连接数,默认8192
server.tomcat.max-connections=10000
## 等待队列长度,默认100。
server.tomcat.accept-count=1000
## 最大工作线程数,默认200。(4核8g内存,线程数经验值800。)
server.tomcat.threads.max=800
## 最小工作空闲线程数,默认10。(适当增大一些,以便应对突然增长的访问量)
server.tomcat.threads.min-spare=100

可以用Jmeter测试工具来测试下配置前后的并发量的性能,比如我这里先使用默认配置:

Jmeter怎么使用可以查看博客:Jmeter教程(一) - 入门

配置服务器,然后重启后,在运行以下Jmeter压力测试工具:

其中:

Label:取样器名称(或者是事务名)。
#Samples:取样器运行次数(提交了多少笔业务)。
Average:请求(事务)的平均响应时间,单位为毫秒。
Min:请求的最小响应时间,单位为毫秒。
Max:请求的最大响应时间,单位为毫秒。
Std.Dev:响应时间的标准方差。
Error%:事务错误率。

在第二次中,提交次数为第一次的3倍:

  • 平均响应时间小于3倍,大约为2倍,也就是说直观上来说加快了效率;
  • 请求的最小响应时间变得更小了,请求的最大响应时间这里却增大了,所以可能设置的配置值不合理。
  • 总的来说就是确实在略微变大服务器的并发配置的时候,效率上有一些提升。

我们知道在Http1.1之后就默认支持TCP长连接,已达到连接复用,提高资源复用率和请求效率。而我们通常在请求的时候适用的请求头部字段为Connection:keep-alive。如果说用户在一次请求后,并没有其余的操作了,而使用长连接来保持这个请求,很明显这里就会导致资源的浪费问题。

那么,我们可以在后台设置其超时时长,可以从两个方面设置:

  • session超时,我们知道默认的session超时为30分钟,所以我们可以设置一个较短的时间来达到断开连接的目的;可以在用户登录成功后,就设置一个Session的超时时长,比如:session.setMaxInactiveInterval(6 * 60); // 默认单位为秒,这里为6分钟。
  • keep-alive超时,每个连接可以设置其超时时长,可以参考博客:springboot 长连接 keepalive 记录

SpringBoot项目高并发问题相关推荐

  1. springboot实现高并发红包系统(java 全网最全包括语音口令 文字口令 普通 拼手气)

    博主技术笔记 博主开源微服架构前后端分离技术博客项目源码地址,欢迎各位star springboot实现高并发红包系统(全网最全) 下面的业务处理请根据你们实际的场景进行处理 1.sql设计 CREA ...

  2. [SpringBoot][15][SpringBoot处理高并发]

    第 15 章 SpringBoot处理高并发 在企业实际应用中,会遇到很多高并发场景,最典型的例子就是双十一的抢购.这时候,如果仅仅按照之前简单的方式进行处理,不仅性能无法保证,而且有可能导致数据库某 ...

  3. api商品分享源码_SSM框架高并发和商品秒杀项目高并发秒杀API源码免费分享

    前言: 一个整合SSM框架的高并发和商品秒杀项目,学习目前较流行的Java框架组合实现高并发秒杀API 源码获取:关注头条号转发文章之后私信[秒杀]查看源码获取方式! 项目的来源 项目的来源于国内IT ...

  4. 项目高并发问题解决方案合集

    Java项目中高并发问题的解决方案 这道题是比较典型的题吧,也是我第一个公司入职的时候,面试官问我的,当时我回答只能说是星星之火,还不能燎原那种,差点被面试官给浇灭. 1.采用缓存技术 这是最简单的一 ...

  5. 高并发服务器开源项目,高并发服务器框架详解 - osc_qgfjs4a5的个人空间 - OSCHINA - 中文开源技术交流社区...

    1)如何设计如何扩展 2)什么是高并发 (1)任务:完成某个功能的一个一个目标任务,服务器程序也是不例外的. (2)CPU核心:完成具体任务的,是CPU核心 + 周围的外设(读写磁盘IO.网络IO) ...

  6. 基于SpringBoot的高并发秒杀(限时秒杀)

    序 最近出于公司业务需要,做了拼团抢购,秒杀的业务. 秒杀系统场景特点 秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增. 秒杀一般是访问请求数量远远大于库存数量,只有少部分用户能够秒杀成 ...

  7. web项目高并发量网站解决方案

    一个小型的网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单.随着互联网业务的不断丰富,网站相关的技术经过 ...

  8. Java高并发秒杀平台(Redis + RabbitMQ)

    Seconds-Kill 本项目是一个模拟高并发环境下基于 SpringBoot 的秒杀购物平台.为了减少对数据库的直接访问,通过 Redis 实现了缓存优化:并通过 RabbitMQ 消息中间件来接 ...

  9. 电商网站秒杀和抢购的高并发技术实现和优化

    一.如何防止多个用户同时抢购同一商品,防止高并发同时订购同一商品?​ 最近双十一抢购系统应用频繁,销量火爆的同时,让人头疼是却是多用户高并发情况下出现的库存问题. 据调查,多个用户同时下单,导致查询和 ...

最新文章

  1. golang 解析php序列化,golang实现php里的serialize()和unserialize()序列和反序列方法详解...
  2. SPI flash配置
  3. 【高并发、高性能、高可用】系统设计经验分享!
  4. 【活动报名 | 青源Talk第一期】喻纯 | 自然人机交互的进展与挑战
  5. git简介及使用方法
  6. JBPM executionService.deleteProcessInstanceCascade(id)报错
  7. @param注解_启用 parameters 编译选项简化 mybatis @Param 注解重复问题
  8. 什么是REST API?
  9. 管道popen和pclose的实例使用
  10. docker学习5--docker数据卷(volume)
  11. 辉迅手机号码归属地查询软件 手机号码归属地 手机查询
  12. matlab化函数图像示例,Matlab绘制函数图像函数示例汇总
  13. 多媒体计算机辅助英语教学,浅谈多媒体计算机辅助英语教学
  14. 分库分表学习总结(1)——数据库中间件MyCat学习总结之MyCat入门简介
  15. Oracle中国区管理层变更史
  16. 思科 mds 虚拟服务器,保护、扩展、简化,思科MDS9000系列交换机,刷新存储网络新标准!...
  17. docker文件编辑
  18. C语言中的strcat()函数
  19. ch01_时间序列分析简介
  20. 我们应该有一个属于我们自己的游戏 我是一只单飞的鸟

热门文章

  1. mysql源码剖析–LEX结构分析
  2. Linux如何添加路由
  3. 「应用案例」科聪赋能拣选AMR系统,落地新加坡新零售行业
  4. 【回顾 2021,展望 2022】 一同来见证辉煌人生 一个职场人的一年~
  5. cocos2dx跨平台直播实例-ffmpeg-ios篇
  6. Vnode到真实DOM是如何转变的?
  7. vue中轮训器的使用
  8. QDUOJ二次开发记录(前端、后端)
  9. php nav,html nav标签的作用与使用的详解
  10. ctf---小白篇2