生产环境中,如何提升springboot服务吞吐量

如何提升springboot服务吞吐量 在代码过程中我们很多代码都不需要等返回结果,也就是部分代码是可以并行执行,这个时候可以使用异步,最简单的方案是使用springboot提供的@Async注解,当然也可以通过线程池来实现,下面简单介绍下异步步骤。有很多场景对数据实时性要求不那么强的,或者对业务进行业务容错处理时可以将消息发送到kafka,然后延时消费。举个例子,根据条件查询指定用户发送推送消息,这里可以时按时、按天、按月等等,这时就。3、需要时在指定方法中增加@Async注解,如果是需要等待返回值,则demo如下。... 阅读详情

背景
生产环境偶尔会有一些慢请求导致系统性能下降,吞吐量下降,下面介绍几种优化建议。

方案
1、undertow替换tomcat
电子商务类型网站大多都是短请求,一般响应时间都在100ms,这时可以将web容器从tomcat替换为undertow,下面介绍下步骤:

1、增加pom配置

org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-undertow 2、增加相关配置

server:
undertow:
direct-buffers: true
io-threads: 4
worker-threads: 160
重新启动可以在控制台看到容器已经切换为undertow了

2、缓存
将部分热点数据或者静态数据放到本地缓存或者redis中,如果有需要可以定时更新缓存数据

3、异步
在代码过程中我们很多代码都不需要等返回结果,也就是部分代码是可以并行执行,这个时候可以使用异步,最简单的方案是使用springboot提供的@Async注解,当然也可以通过线程池来实现,下面简单介绍下异步步骤。

1、pom依赖

一般springboot引入web相关依赖就行

org.springframework.boot spring-boot-starter-web 2、在启动类中增加@EnableAsync注解

@EnableAsync
@SpringBootApplication
public class AppApplication
{
public static void main(String[] args)
{
SpringApplication.run(AppApplication.class, args);
}
}
3、需要时在指定方法中增加@Async注解,如果是需要等待返回值,则demo如下

@Async
public Future<string> doReturn(int i){
    try {
        // 这个方法需要调用500毫秒
        Thread.sleep(500);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    // 消息汇总
    return new AsyncResult&lt;&gt;("异步调用");
}

4、如果有线程变量或者logback中的mdc,可以增加传递

import org.slf4j.MDC;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskDecorator;
import org.springframework.scheduling.annotation.AsyncConfigurerSupport;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.Map;
import java.util.concurrent.Executor;

/**

  • @Description:
    */
    @EnableAsync
    @Configuration
    public class AsyncConfig extends AsyncConfigurerSupport {
    @Override
    public Executor getAsyncExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setTaskDecorator(new MdcTaskDecorator());
    executor.initialize();
    return executor;
    }
    }

class MdcTaskDecorator implements TaskDecorator {

@Override
public Runnable decorate(Runnable runnable) {
    Map<string, string> contextMap = MDC.getCopyOfContextMap();
    return () -&gt; {
        try {
            MDC.setContextMap(contextMap);
            runnable.run();
        } finally {
            MDC.clear();
        }
    };
}

}
5、有时候异步需要增加阻塞

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;

@Configuration
@Slf4j
public class TaskExecutorConfig {

@Bean("localDbThreadPoolTaskExecutor")
public Executor threadPoolTaskExecutor() {
    ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
    taskExecutor.setCorePoolSize(5);
    taskExecutor.setMaxPoolSize(200);
    taskExecutor.setQueueCapacity(200);
    taskExecutor.setKeepAliveSeconds(100);
    taskExecutor.setThreadNamePrefix("LocalDbTaskThreadPool");
    taskExecutor.setRejectedExecutionHandler((Runnable r, ThreadPoolExecutor executor) -&gt; {
                if (!executor.isShutdown()) {
                    try {
                        Thread.sleep(300);
                        executor.getQueue().put(r);
                    } catch (InterruptedException e) {
                        log.error(e.toString(), e);
                        Thread.currentThread().interrupt();
                    }
                }
            }
    );
    taskExecutor.initialize();
    return taskExecutor;
}

}
4、业务拆分
可以将比较耗时或者不同的业务拆分出来提供单节点的吞吐量

5、集成消息队列
有很多场景对数据实时性要求不那么强的,或者对业务进行业务容错处理时可以将消息发送到kafka,然后延时消费。

举个例子,根据条件查询指定用户发送推送消息,这里可以时按时、按天、按月等等,这时就

生产环境中,如何提升springboot服务吞吐量

更多阅读:https://javawu.com/

比亚迪璇玑架构:10ms级响应引领智能驾驶革命 比亚迪璇玑架构通过三大创新,实现10ms级控制响应时延,使AEB刹车距离比竞品缩短20米。 阅读详情

相关推荐

麒麟V10系统下微信PC版安装全攻略:从源配置到一键安装(附常见问题解决)

本文详细介绍了在麒麟V10系统下安装和优化微信PC版的完整流程,包括系统环境准备、软件源配置、多途径安装方案以及性能优化技巧。特别针对国产操作系统用户,提供了从基础安装到高级配置的一站式解决方案,并附有常见问题排查方法,帮助用户快速实现微信PC版的高效运行。

weixin_30500105的博客 719

Spring boot慢sql查询配置

Spring boot慢sql查询配置 2019年05月31日 13:46:30 人生丶几度 阅读数 111 将执行的sql超过设置时间的找出来,以便于知道优化哪些sql application.properties ,100表示时间,单位毫秒 #spring.datasource.druid.filter.stat.enabled=true 部署数据源默认打开可不配置 ...

f45056231p的博客 3171

消费级显卡跑大模型:RTX 3060 12G 部署 70 亿参数 AI 编程助手的优化实战

本文详细介绍了如何在消费级显卡RTX 3060 12G上,通过量化、投机解码和分页KV-Cache等核心优化技术,成功部署并流畅运行70亿参数的CodeLlama-7B编程助手。文章提供了从环境配置、模型准备到参数调优的完整实战笔记,实测显存占用降至7.3GB,生成速度达21.7 token/秒,为开发者和技术爱好者提供了可行的本地AI部署方案。

weixin_29053067的博客 1262

spring-boot整合druid配置

准备:druid是阿里巴巴开源的高性能,多功能的连接池,其主要配置参数如下: 配置 缺省值 说明 name   配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this). 另外配置此属性至少在1.0.

啊大海全是水的博客 1万+

PTrade数据交互全流程详解:从本地文件上传到定时导出交易数据

本文详细解析了PTrade量化交易平台的数据交互全流程,涵盖从本地文件自动上传交易指令到定时导出成交数据的完整链路。通过文件媒介实现本地策略与云端实盘的安全、稳定对接,并提供了构建自动化、稳健数据流水线的实战配置方案与代码示例,助力量化工作流平滑过渡至实盘。

gg901的博客 883

数电-基于FPGA的自动售货控制系统设计

本次数电的课程设计是设计一款基于FPGA的自动售货控制系统,因为手上暂时没有FPGA的板子,所以先采用proteus仿真进行设计,观察系统效果,等之后FPGA板子下发,再移到quartus上调试和下载。同样是自己第一次自主设计电路系统,可能在功能上不完整或者逻辑上有错误,大家多多包涵,欢迎沟通交流。

gg1067的博客 2293

springboot中使用druid打印慢sql失效

druid 配置 配置过后仍然无法打印。 问题原因:从druid的源码LogFactory中发现 druid会优先使用log4j 来作为日志框架 我的项目使用spring boot中默认的 logback ,同时有一个第三方库中依赖的log4j。druid 发现我引入的有log4...

chennei5176的博客 1812

Open Dynamics Engine(ODE)物理引擎基础教程(I)——特点介绍

下一教程 Open Dynamics Engine(ODE)物理引擎基础教程(II)——相关概念 (在这一教程中将学习刚体、关节、碰撞的概念在ODE中的特点) 本文结构引言介绍特点使用ODE总结 引言 本文翻译自ODE官方教程英文版,有些地方增加了自己的理解。这一节介绍ODE的相关概念。 基础教程英文原版链接【http://ode.org/wiki/index.php?title=Manua...

腿足机器人领域 1680

一条慢SQL拖死整个系统

慢sql导致服务变慢

weixin_38972910的博客 1889

泰山派rk3566 audio音频基础介绍

本文介绍了嵌入式系统中音频处理的基础知识,重点围绕RK3566平台的音频子系统展开。文章首先解释了音频信号从模拟到数字的转换过程,包括采样率、位深和声道等核心概念。随后详细分析了嵌入式音频开发中的关键接口:I2C用于控制音频编解码器,I2S作为专用音频数据传输总线,以及PCM作为原始音频格式和ALSA设备抽象的双重含义。通过对这些基础概念和接口的解析,为在RK3566平台上进行音频驱动开发和应用调试提供了理论基础。

qq_37077309的博客 295

华为OD机试2025C卷-双十一最大花费金额[100分](Java_Python3_C++_C语言_JsNode_Go)实现100%通过率

双十一最大花费金额 - 动态规划解法 摘要:本文介绍了华为OD机试中"双十一最大花费金额"问题的动态规划解法。该问题要求在给定N件商品价格和优惠券面额X的情况下,选择若干商品使总花费不超过X且尽可能大。核心解法采用布尔型动态规划数组,记录每个金额是否可被拼出。算法时间复杂度为O(N*X),空间复杂度为O(X)。通过倒序遍历避免重复选择同一商品,最后从X向下查找第一个可达金额作为答案。文中提供了C++和Java的实现代码,并解释了与经典0-1背包问题的关系。 关键点: 问题本质是0-1背包/子集和问题的变体

2503_91057718的博客 47

Spring boot第一次请求很慢问题

问题有以下几个: 1、dispatcherServlet 是懒加载的 2、数据库链接是懒加载的 3、linux 下真随机数生成器 解决方案: 1,servlet配置load-on-startup的作用–配置spring.mvc.servlet.load-on-startup=1 2,指定配置文件中spring.datasource.druid.initial-size=1,即启动时会初始化数据库连...

学医救不了中国人 9725

Ubuntu-22.04安装VMware虚拟机并安装Windows10

最近在研究虚拟机,主要集中在KVM、Virtualbox和VMware这三种虚拟机上。前面我已经研究了前两种虚拟机的安装和使用方式,这篇文章介绍3兄弟中最后一个虚拟机安装和使用方式。Virtualbox虚拟机安装和使用KVM虚拟机安装和使用相比于前两种,VMware的安装方式最麻烦,但是综合体验下来我感觉流畅度最好。如果你确实有在Linux上使用VMware虚拟机的需求,那不妨跟着我看下去吧。1、gcc版本和内核版本一定要匹配上,否则会出各种错误。

jiexijihe945的博客 4118

Java 21 虚拟线程实战:SpringBoot 3.2 应用吞吐量提升 3 倍配置指南

本文详细介绍了Java 21虚拟线程技术在SpringBoot 3.2中的应用实践,通过配置虚拟线程执行器和优化I/O密集型服务,显著提升应用吞吐量达3倍。文章包含性能对比、调优建议及生产环境注意事项,帮助开发者高效利用Java 21新特性提升系统性能。

weixin_30652897的博客 545

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

AWPortrait-Z与SpringBoot集成:构建人像美化微服务

本文介绍了如何将AWPortrait-Z人像美化模型与SpringBoot微服务集成,构建可扩展的AI服务。通过星图GPU平台,开发者可以自动化部署“AWPortrait-Z 基于Z-Image精心构建的人像美化LoRA 二次开发webui构建by科哥”镜像,快速搭建服务后端。该服务可应用于摄影工作室的在线修图工作流,实现批量、高效的人像照片自动化美化,显著提升内容处理效率。

weixin_42230607的博客 259

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SpringBoot3与FastJson2的深度适配指南:超越基础配置的性能调优实践

本文深入探讨了SpringBoot3与FastJson2的高性能集成方案,从基础配置到全栈优化实践。详细介绍了FastJson2的核心特性、Maven依赖配置、高级性能调优策略,以及在WebSocket和Redis中的高级应用。通过实战案例展示了如何提升系统吞吐量,降低响应时间,适用于对性能要求严格的企业级应用开发。

data3的博客 1065

如何提升SpringBoot服务吞吐量?

### 背景 ### 生产环境偶尔会有一些慢请求导致系统性能下降,吞吐量下降,下面介绍几种优化建议。 ### 方案 ### 1、undertow替换tomcat 电子商务类型网站大多都是短请求,一般响应时间都在100ms,这时可以将web容器从tomcat替换为undertow,下面介绍下步骤: 1.1、增加pom配置 <dependency> <group...

myroncham的博客 834

springboot异步注解_Spring Boot 如何提升服务吞吐量?

背景生产环境偶尔会有一些慢请求导致系统性能下降,吞吐量下降,下面介绍几种优化建议。方案1、undertow替换tomcat电子商务类型网站大多都是短请求,一般响应时间都在100ms,这时可以将web容器从tomcat替换为undertow,下面介绍下步骤: 1、增加pom配置<dependency> <groupid>org.springframework.boot...

weixin_39520988的博客 145

你还在为Springboot服务吞吐量而烦扰吗?如何提升本文告诉你

作者:lipengHekemy.oschina.net/u/560547/blog/3162343背景生产环境偶尔会有一些慢请求导致系统性能下降,吞吐量下降,下面介绍几种优化建议。方案1...

emprere的博客 449

Spring Boot 如何提升服务吞吐量?

背景生产环境偶尔会有一些慢请求导致系统性能下降,吞吐量下降,下面介绍几种优化建议。方案1、undertow替换tomcat电子商务类型网站大多都是短请求,一般响应时间都在100ms,这时可以将web容器从tomcat替换为undertow,下面介绍下步骤: 1、增加pom配置<dependency> <groupid>org.springframework.boot...

十指波课堂的博客 394

微服务实战之如何提升springboot服务吞吐量

1、undertow替换tomcat 2、缓存 3、系统拆分 4、集成kafka,参考消息触发

lipeng的博客 2069
上一篇: 哪些代码破坏了LSP?
下一篇: 深入理解Java虚拟机笔记---判断对象是否存活
大盛玩java
博客等级 码龄5年 0粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值