如何能使单个springboot并发性能最优

‌**1. 线程池优化(Web容器层)**‌

‌Tomcat配置示例‌:

server: tomcat: max-threads: 200 # 默认200,建议公式:CPU核心数*(1+WT/ST) min-spare-threads: 20 # 初始线程数 accept-count: 100 # 等待队列长度 connection-timeout: 5s # 连接超时

‌原理‌:

  • max-threads:处理请求的线程数上限(超过后进入等待队列)
  • accept-count:队列满时的拒绝策略阈值(Linux下Epoll模型效率更高)

‌2. 异步非阻塞处理‌

‌Servlet 3.1+异步支持‌:

@WebServlet(asyncSupported = true) public class AsyncServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) { AsyncContext ctx = req.startAsync(); CompletableFuture.runAsync(() -> { // 异步处理逻辑 ctx.complete(); }); } }

‌**响应式编程(WebFlux)**‌:

@GetMapping("/flux") public Flux<Data> getStream() { return reactiveRepository.findAll() .subscribeOn(Schedulers.boundedElastic()); }


‌**3. 连接池优化(数据库/HTTP)**‌

‌HikariCP配置‌:

spring: datasource: hikari: maximum-pool-size: 20 # 公式:(core_count * 2) + effective_spindle_count connection-timeout: 30000 idle-timeout: 600000 max-lifetime: 1800000

‌HTTP客户端优化‌:

@Bean public WebClient webClient() { return WebClient.builder() .clientConnector(new ReactorClientHttpConnector( HttpClient.create() .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000) .doOnConnected(conn -> conn.addHandlerLast(new ReadTimeoutHandler(5)) ) )) .build(); }


‌4. JVM参数调优‌

‌关键参数‌:

java -jar -Xms2g -Xmx2g -XX:+UseG1GC \ -XX:MaxGCPauseMillis=200 \ -XX:ParallelGCThreads=4 \ -XX:ConcGCThreads=2 \ -XX:+HeapDumpOnOutOfMemoryError \ app.jar

‌GC选择策略‌:

  • ‌低延迟‌:ZGC(JDK15+)或 Shenandoah
  • ‌高吞吐‌:G1GC(默认)
  • ‌小内存‌:ParallelGC

‌5. 缓存优化‌

‌多级缓存架构‌:

@Configuration @EnableCaching public class CacheConfig { @Bean public CacheManager cacheManager() { CaffeineCacheManager manager = new CaffeineCacheManager(); manager.setCaffeine(Caffeine.newBuilder() .maximumSize(1000) .expireAfterWrite(10, TimeUnit.MINUTES)); return manager; } }

‌分布式缓存‌:

spring: cache: type: redis redis: lettuce: pool: max-active: 16 max-idle: 8


‌6. 性能监控与诊断‌

‌Arthas实时诊断‌:

# 监控方法调用耗时 watch com.example.Service * '{params,returnObj}' -x 3 -n 5 # 查看线程阻塞 thread -b

‌Prometheus监控指标‌:

@Bean MeterRegistryCustomizer<MeterRegistry> metrics() { return registry -> registry.config().commonTags("app", "high-perf"); }


‌7. 其他关键优化点‌

  1. ‌静态资源处理‌:

    • 启用HTTP/2:server.http2.enabled=true
    • 资源压缩:server.compression.enabled=true
  2. ‌序列化优化‌:

    @Bean HttpMessageConverters customConverters() { return new HttpMessageConverters(new MappingJackson2HttpMessageConverter( new ObjectMapper().registerModule(new JavaTimeModule()) )); }

  3. ‌分布式锁优化‌:

    @Bean public RedissonClient redisson() { Config config = new Config(); config.useClusterServers() .setScanInterval(2000) .addNodeAddress("redis://127.0.0.1:6379"); return Redisson.create(config); }


‌性能对比基准‌

优化项 QPS提升 延迟降低 适用场景
线程池调优 30-50% 20% IO密集型
WebFlux响应式 3-5x 60% 高并发微服务
连接池优化 40% 30% 数据库/HTTP依赖
缓存命中率提升 10x 90% 读多写少
JVM GC调优 15% 50% 内存敏感型应用

‌实战检查清单‌

  1. 使用wrk压力测试:

    wrk -t12 -c400 -d30s http://localhost:8080/api

  2. 分析火焰图: async-profiler -d 60 -f flamegraph.html pid

  3. 监控关键指标:

    • CPU使用率(需低于70%)
    • GC停顿时间(G1GC建议<200ms)
    • 线程池活跃度(tomcat.threads.busy)

需要针对具体场景的深度优化方案(如Kafka消费者并发优化、MyBatis批处理等)可进一步探讨。

相关推荐
WeiXin_DZbishe13 分钟前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计
AIGC小尼2 小时前
毕设实战|SpringBoot+Vue 实现多个系统项目
vue.js·spring boot·课程设计
光依旧3 小时前
发版就掉请求?Spring Boot优雅停机的四步
运维·spring boot·nginx·高可用·优雅停机·mcp server
SL_staff6 小时前
BI不该只服务高管:JVS如何让仓库管理员自主配置库存预警
spring boot·数据分析·数据可视化
码哥字节6 小时前
Spring Boot 4.1 默认开虚拟线程,连接池为什么反而打满了?
spring boot·后端
十年Java程序媛7 小时前
String / StringBuilder / StringBuffer|别再乱用字符串拼接,底层原理一次讲透
java·spring boot·后端
她的男孩7 小时前
权限通了、列表有数,一点分页就炸Forge Admin 用 COUNT(1) 扛住复杂待办
java·spring boot·mybatis
WeiXin_DZbishe8 小时前
基于微信小程序的本地闲置物品交易平台-计算机毕设 附源码【课程设计】26825
vue.js·spring boot·python·微信小程序·架构·php·课程设计
高级程序源8 小时前
springboot本地生活服务平台33399-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·小程序·flask·课程设计
高级程序源9 小时前
springboot社区旧物回收管理系统25381-计算机课程设计、毕业设计
vue.js·spring boot·python·django·课程设计