当前位置: 首页 > news >正文

SpringBoot性能优化的12招

前言

不知道你在SpringBoot项目中,有没有遇到过下面这样的代码:

@GetMapping("/orders")
public List<Order> listOrders() {
    return orderDao.findAll(); 
}

一次性查询了所有的订单,全表扫描50万数据,导致接口查询性能很差,严重的时候可能会导致OOM问题。

问题定位

  • 未分页查询

  • 无缓存机制

  • 未启用批量处理

这次事故让我明白:性能优化必须贯穿开发全流程

图片

第1招:连接池参数调优

问题场景
默认配置导致连接池资源浪费,高并发时出现连接等待

错误配置

spring:
  datasource:
    hikari:
      maximum-pool-size: 1000 
      connection-timeout: 30000

数据库连接池的最大连接数,盲目设置过大,连接超时时间设置过长。

优化方案

spring:
  datasource:
    hikari:
      maximum-pool-size: ${CPU核心数*2} # 动态调整
      minimum-idle: 5
      connection-timeout: 3000 # 3秒超时
      max-lifetime: 1800000 # 30分钟
      idle-timeout: 600000 # 10分钟空闲释放

数据库连接池的最大连接数,改成根据CPU核心数动态调整。

将连接超时时间由30000,改成3000。

第2招:JVM内存优化

问题场景
频繁Full GC导致服务卡顿

我们需要优化JVM参数。

启动参数优化

java -jar -Xms4g -Xmx4g 
-XX:NewRatio=1 
-XX:+UseG1GC 
-XX:MaxGCPauseMillis=200 
-XX:InitiatingHeapOccupancyPercent=35
-XX:+AlwaysPreTouch

最大堆内存和初始堆内存都设置成了4G。

-XX:NewRatio=1,设置新生代和老年代各占一半。

垃圾收集器配置的是G1。

垃圾回收的最大停顿时间为200毫秒。

第3招:关闭无用组件

问题场景
自动装配加载不需要的Bean

优化方案

@SpringBootApplication(exclude = {
    DataSourceAutoConfiguration.class,
http://www.xdnf.cn/news/651547.html

相关文章:

  • Flutter Container组件、Text组件详解
  • 商城图片性能优化实战:懒加载与下一代格式的化学反应
  • 游戏行业DDoS防护:基于IP信誉库的实时拦截方案
  • ArrayBlockingQueue 和 LinkedBlockingQueue 有什么区别?
  • 第一章第2节:安全生命周期(识别→防护→检测→响应→恢复)
  • LitCTF2025 WEB
  • linux文件权限管理
  • 《软件工程》-第 1 章 软件与软件工程
  • Python 网络编程入门
  • 【人工智能-agent】--使用python调用dify工作流
  • Win10/Win11终极C盘清理指南
  • 深入剖析Java中的伪共享:原理、检测与解决方案
  • RT-Thread源码阅读(3)——内核对象管理
  • ES6基础
  • 考研408《计算机组成原理》复习笔记,第二章(3)数值数据的运算(浮点数计算篇)
  • 新一代WebP2P视频物联技术:EasyRTC嵌入式音视频通信SDK助力音视频实时通信场景应用
  • 基于SpringBoot+RabbitMQ完成应用通信
  • 编程日志5.19
  • 一根网线可以有两个ip地址吗?怎么实现
  • 洛谷-P1957 口算练习题
  • 基于大模型的胃肠道功能紊乱手术全程预测与干预方案研究
  • Elasticsearch 分片驱逐(Shard Exclusion)方式简析:`_name`、`_ip`、`_host`
  • 图论 判断是否有环
  • (自用)Java学习-5.13(Redis,OSS)
  • 第三十七天打卡
  • 【EdgeYOLO】《EdgeYOLO: An Edge-Real-Time Object Detector》
  • 分布式爬虫架构设计
  • Python 实现简单OCR文本识别
  • HTML应用指南:利用GET请求获取全国捞王锅物料理门店位置信息
  • cannot access ‘/etc/mysql/debian.cnf‘: No such file or directory