点击上方“方志朋”,选择“设为星标”

回复”666“获取新整理的面试文章

作者:lipengHeke

出处:my.oschina.net/u/560547/blog/3162343

# 背景

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

# 方案

1、undertow替换tomcat

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

<dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-web</artifactid><exclusions><exclusion><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-tomcat</artifactid></exclusion></exclusions>
</dependency>
<dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-undertow</artifactid>
</dependency>

2、增加相关配置

server:undertow:direct-buffers: trueio-threads: 4worker-threads: 160

重新启动可以在控制台看到容器已经切换为undertow了

2、缓存

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

3、异步

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

<dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-web</artifactid>
</dependency>

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 {@Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setTaskDecorator(new MdcTaskDecorator());executor.initialize();return executor;}
}class MdcTaskDecorator implements TaskDecorator {@Overridepublic 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,然后延时消费。举个例子,根据条件查询指定用户发送推送消息,这里可以时按时、按天、按月等等,这时就 

热门内容:一个基于Spring Boot的API、RESTful API项目骨架
你能说出多线程中 sleep、yield、join 的用法及 sleep与wait区别吗?
试试 IntelliJ IDEA 自带的高能神器!我去,你写的 switch 语句也太老土了吧硬核干货:一位码农的架构师封神之路!
阿里问题定位神器 Arthas 的骚操作,定位线上BUG,超给力
用好idea这几款插件,可以帮你少写30%的代码!最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。

springboot应用如何提高服务吞吐量?相关推荐

  1. Spring Boot 应用如何提高服务吞吐量?

    背景 生产环境偶尔会有一些慢请求导致系统性能下降,吞吐量下降,下面介绍几种优化建议. 方案 1.undertow替换tomcat 电子商务类型网站大多都是短请求,一般响应时间都在100ms,这时可以将 ...

  2. SpringBoot搭建天气预报微服务系统

    SpringBoot搭建天气预报微服务系统 前言 本系列文章将简单的学习SpringCloud微服务相关知识,其实也是因为时间的原因,一直拖到现在,遂打算趁着假期,决定记录下来. 从天气预报微服务系统 ...

  3. (附源码)springboot社区养老医疗服务平台 毕业设计 041148

    springboot社区养老医疗服务平台 摘  要 随着社会的发展,社会的各行各业都在利用信息化时代的优势.计算机的优势和普及使得各种信息系统的开发成为必需. 社区养老医疗服务平台,主要的模块包括查看 ...

  4. mysql属性配置提高查询_MYSQL性能优化-安装时优化参数配置提高服务性能

    MYSQL性能优化一直是个头痛的问题,目前大多都是直接把页面html静态页面或直接使用了缓存技术,下面我就mysql本身的性能优化来分享一下. 安装时优化参数配置提高服务性能 在Linux下安装Mys ...

  5. 基于SpringBoot开发一个Restful服务,实现增删改查功能

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:虚无境 cnblogs.com/xuwujing/p/8260935.html 前言 在去 ...

  6. SpringBoot调用RESTful Web服务

    SpringBoot调用RESTful Web服务 本指南将引导您完成创建使用RESTful Web服务的应用程序的过程. 你会建立什么 您将RestTemplate在https://gturnqui ...

  7. springboot使用curator实现服务的注册和发现

    本文来说下springboot使用curator实现服务的注册和发现 文章目录 概述 概述

  8. springboot增删改查案例_大神基于SpringBoot开发一个Restful服务,实现增删改查功能...

    前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...

  9. k8s停止服务_Kubernetes 服务部署最佳实践(二) 如何提高服务可用性

    引言 上一篇 文章我们围绕如何合理利用资源的主题做了一些最佳实践的分享,这一次我们就如何提高服务可用性的主题来展开探讨. 怎样提高我们部署服务的可用性呢?K8S 设计本身就考虑到了各种故障的可能性,并 ...

最新文章

  1. iOS:消除项目中警告
  2. Spring mvc 转发、重定向
  3. docker 外部连接_如何从主机外部(同一网络)连接到Docker容器[Windows]
  4. 动态规划算法-07背包问题进阶
  5. Jsoup 抓取和数据页 认识HTTP头
  6. android 移除泛型中元素_Android 代码混淆 混淆方案
  7. PostgreSQL 创建分区表(转 仅供自己参考)
  8. 爬虫:Python爬虫学习笔记之Urllib库
  9. SDN、NFV:一枝独秀不是春
  10. Python爬取新浪英超曼联文章内页--bs4,json,txt和csv以及编码
  11. 机器学习 (十三) 电商O2O优惠券使用预测-1
  12. 'font:12px/1.5 Tahoma' 其中12px/1.5表示什么
  13. C++怎么操作EXCEL
  14. 在Ubuntu 18中安装Pycharm及创建Pycharm快捷方式
  15. 数据结构课程设计 公交系统
  16. 1微秒等于多少皮秒_秒的换算:ms(毫秒),μs(微秒),ns(纳秒),ps(皮秒)
  17. CPU处理器检测工具
  18. ccf-csp 2013-2015题目总结
  19. 为什么任正非“反对”自主创新?
  20. SPSS如何做离散和连续变量的统计描述

热门文章

  1. nginx的gzip压缩功能
  2. linux source命令
  3. stm32F042 (二) 按键触发中断
  4. [亲测]在Mac下配置php开发环境:Apache+php+MySql
  5. ODBC更新记录集提示”记录集为只读“
  6. 四月青少年编程组队学习(Python一级)Task01
  7. 【直播】耿远昊:Pandas入门讲解(安泰第四届数据科学训练营)
  8. 【Python】zip函数
  9. 【牛客】CSL 的字符串 (stack map)
  10. CSDN 十大技术主题盘点-AI篇