[SpringCloud] 组件性能优化技巧

  • Feign 配置优化
  • hystrix配置 优化
  • ribbon 优化
  • Servlet 容器 优化
  • Zuul配置 优化

文章目录

      • 1.Servlet 容器 优化
      • 2.Feign 配置优化
      • 3.Zuul配置 优化
      • 4.hystrix配置 优化
      • 5.ribbon 优化

1.Servlet 容器 优化

默认情况下, Spring Boot 使用 Tomcat 来作为内嵌的 Servlet 容器, 可以将 Web 服务器切换到 Undertow 来提高应用性能, Undertow 是红帽公司开发的一款基于 NIO 的高性能 Web 嵌入式。

Zuul使用的内置容器默认是Tomcat, 可以将其换成undertow, 可以显著减少线程的数量。


<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>
server:undertow:io-threads: 16worker-threads: 256buffer-size: 1024buffers-per-region: 1024direct-buffers: true
  1. server.undertow.io-threads: 设置IO线程数, 主要执行非阻塞的任务。
  2. server.undertow.worker-threads: 阻塞任务线程池 。
  3. server.undertow.buffer-size: 类似netty的池化内存管理, buffer的大小, 小的空间被利用更充分。
  4. server.undertow.buffers-per-region: 每个区分配的buffer数量。
  5. server.undertow.direct-buffers: 是否分配的直接内存(NIO直接分配的堆外内存)。

2.Feign 配置优化

feign 默认不启用hystrix, feign.hystrix.enabled=true 开启熔断。

feign 启用压缩也是一种有效的性能优化方式。

feign:compression:request:enabled: truemime-types: text/xml,application/xml,application/jsonresponse:enabled: true

feign HTTP请求方式选择。

feign默认使用的是基于JDK提供的URLConnection调用HTTP接口, 无线程池, Apache HttpClientokhttp都支持配置连接池功能, 也可以使用okhttp请求方式。

HttpClient:

feign:httpclient:enabled: truemax-connections:1000max-connections-per-route: 200 

okHttp:

feign:okhttp:enabled: truehttpclient:max-connections: 1000max-connections-per-route: 200   
  1. max-connections: 设置整个连接池最大连接数。
  2. max-connections-per-route: 设置路由的默认最大连接。

3.Zuul配置 优化

Hystrix有隔离策略: THREAD 以及SEMAPHORE, 默认是 SEMAPHORE 。

Zuul默认是使用信号量隔离, 信号量数量为100, 请求的并发线程超过100就会报错。

zuul:semaphore:max-semaphores: 5000

为了方便ThreadLocal的使用, 可以改变隔离策略, 需要调大hystrix的线程池大小。

zuul:ribbonIsolationStrategy: THREAD
hystrix:threadpool:default:coreSize: 100maximumSize: 400allowMaximumSizeToDivergeFromCoreSize: truemaxQueueSize: -1
  1. hystrix.threadpool.default.allowMaximumSizeToDivergeFromCoreSize: 是否让maximumSize生效, false为只有coreSize会生效。
  2. hystrix.threadpool.default.maxQueueSize: 线程池的队列大小。
  3. hystrix.threadpool.default.maximumSize: 最大线程数。
  4. zuul.ribbon-isolation-strategy: 线程隔离策略。

4.hystrix配置 优化

需要设置参数hystrix.threadpool.default.coreSize 来指定熔断隔离的线程数, 这个数需要调优。

hystrix:threadpool:default:coreSize: 500command:default:circuitBreaker: requestVolumeThreshold: 1000fallback:enabled: trueexecution:isolation:thread:timeoutInMilliseconds: 100000 
  1. hystrix.command.default: 全局作用域, 作用的所有的hystrix的客户端, 如果需要对某个微服务, 可以写serviceId。
  2. hystrix.command.default.fallback.enabled: 是否开启回退方法。
  3. hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 请求处理的超时时间, 缺省为1000,表示默认的超时时间为1S。
  4. hystrix.threadpool.default.coreSize 核心线程池数量。
  5. hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests 回退最大线程数。
  6. hystrix.command.default.circuitBreaker.requestVolumeThreshold: 熔断器失败的个数

5.ribbon 优化

Ribbon进行客户端负载均衡的Client并不是在服务启动的时候就初始化好的, 而是在调用的时候才会去创建相应的Client, 所有第一次调用的耗时不仅仅包含发送HTTP请求的时间, 还包括了创建RibbonClient的时间。

ribbon:eager-load:enabled:trueclients:service-1,service-2,service-n
  1. ribbon.eager-load.enabled: 开启Ribbon的饥饿模式。
  2. ribbon.eager-load.clients: 指定需要饥饿加载的服务名。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/36955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Visual Studio上,使用OpenCV实现人脸识别

1. 环境与说明 本文介绍了如何在Visual Studio上&#xff0c;使用OpenCV来实现人脸识别的功能 环境说明 : 操作系统 : windows 10 64位Visual Studio版本 : Visual Studio Community 2022 (社区版)OpenCV版本 : OpenCV-4.8.0 (2023年7月最新版) 实现效果如图所示&#xff0…

Linux命令200例:adduser用于创建新用户

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

代理模式【Proxy Pattern】

什么是代理模式呢&#xff1f;我很忙&#xff0c;忙的没空理你&#xff0c;那你要找我呢就先找我的代理人吧&#xff0c;那代理人总要知道 被代理人能做哪些事情不能做哪些事情吧&#xff0c;那就是两个人具备同一个接口&#xff0c;代理人虽然不能干活&#xff0c;但是被 代…

解决 Mac 上使用 Electron Updater 更新 App 不成功的问题!!!

文章目录 1. 现象2. 分析并如何解决3. 后续 1. 现象 在Mac电脑上&#xff0c;使用Electron Updater对程序进行更新&#xff0c;但是一直不成功&#xff0c;也不报错。具体表现是这样的&#xff1a;当前我的程序版本是3.11版本&#xff0c;点击更新之后&#xff0c;也下载了&am…

11 迭代器|生成器|协程

文章目录 迭代器可迭代对象可迭代对象的本质iter()函数与 next()函数迭代器 Iterator样例 for...in...循环的本质使用的场景--斐波那契数列list和tuple也可以接收可迭代对象 生成器简介创建生成器方法一方法二总结 使用 send 唤醒 协程协程和线程差异简单实现协程greenletgeven…

微PE工具箱实现U盘重装Windows系统

教程来源 U盘重装Windows系统&#xff08;微PE工具箱&#xff09;_哔哩哔哩_bilibili 加上自己的一丢丢理解&#xff0c;如果你觉得长视频看了犯困&#xff0c;不如看看我的理解文章说不定能够帮助到你 准备工作 到这个网站使用迅雷下载免费无插件的官方镜像MSDN, 我告诉你…

JVM笔记 —— 出现内存溢出错误时时如何排查

一、出现内存溢出的几种情况 内存溢出错误分为StackOverflowError和OutOfMemoryError&#xff0c;前者是栈中出现溢出&#xff0c;后者一般是堆或方法区出现溢出&#xff0c;简称OOM 1. 栈溢出 StackOverflowError 栈溢出一般都是因为没有正确的结束递归导致的&#xff0c;无…

Linux中安装MySQL8版本,安装MySQL步骤,MySQL8离线安装

Linux中安装MySQL8版本的步骤如下&#xff1a; 1.检查下libaio.so.1的位置 [roottdx ]# whereis libaio.so.1 libaio.so: /usr/lib64/libaio.so.1 如果没有找到该文件 (1).在线安装 [roottdx ]# yum install -y libaio (2).离线安装&#xff1a; 上传之后执行命令安装&#…

pymysql 库 - python 操作 mysql

环境&#xff1a; Win10 x64 Python 3.7 PyMySQL 1.0.2 MySQL 8.0.27 1 安装 pip install pymysql 2 地址 https://pypi.org/project/pymysql/ 3.1 数据库版本查询 (search_version.py) import pymysql# 打开数据库连接 try:db pymysql.connect(hostlocalhost, userr…

python安装第三方包时报错:...\lib\site-packages\pip\_vendor\urllib3\response.py...

安装redis第三方包&#xff1a; pip install redis报错现象&#xff1a; 解决方法&#xff1a;使用以下命令可成功安装 pip install redis -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

关于网络入侵检测领域使用Spark/Flink等计算框架做分布式

关于网络入侵检测领域使用Spark/Flink等计算框架做分布式 0、引言1 基于LightGBM的网络入侵检测研究2 基于互信息法的智能化运维系统入侵检测Spark实现3 基于Spark的车联网分布式组合深度学习入侵检测方法4 基于Flink的分布式在线集成学习框架研究5 基于Flink的分布式并行逻辑回…

mongodb基础

mongodb语法 参考文档&#xff1a;https://docs.mongodb.com/manual/reference/ BSON Types BSON Type有2种标识符&#xff0c;整形和字符串 类型数值字符串说明Double1“double”String2“string”Object3“object”Array4“array”Binary data5“binData”Undefined6“un…

8.9黄金最新行情走势分析及短线交易策略

近期有哪些消息面影响黄金走势&#xff1f;黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周三&#xff08;8月9日&#xff09;现货黄金维持震荡&#xff0c;目前交投于1930美元附近&#xff0c;隔日现货黄金盘中震荡下行&#xff0c;失守1930关口并在美盘时段…

【Spring】-Spring的IoC和DI

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【Framework】 主要内容&#xff1a;什么是spring&#xff1f;IoC容器是什么&#xff1f;如何使代码解耦合&#xff1f;IoC的核心原理&#xff0c;IoC的优点。依赖注入/对象装配/…

【ARM 嵌入式 编译系列 10 -- GCC 编译缩减可执行文件 elf 文件大小】

文章目录 GCC 如何缩减可执行文件size测试代码 上篇文章&#xff1a;ARM 嵌入式 编译系列 9-- GCC 编译符号表&#xff08;Symbol Table&#xff09;的详细介绍 下篇文章&#xff1a;ARM 嵌入式 编译系列 10.1 – GCC 编译缩减可执行文件 elf 文件大小 GCC 如何缩减可执行文件s…

Linux下在qtcreator中创建qt程序

目录 1、新建项目 2、单工程项目创建 3、多工程项目创建 4、添加子工程&#xff08;基于多工程目录结构&#xff09; 5、 .pro文件 1、新建项目 切换到“编辑”界面&#xff0c;点击菜单栏中的“文件”-“新建文件或项目” 2、单工程项目创建 只有一个工程的项目&#…

Axure RP移动端高保真CRM办公客户管理系统原型模板及元件库

Axure RP移动端高保真CRM办公客户管理系统原型模板及元件库&#xff0c;一套典型的移动端办公工具型APP Axure RP原型模板&#xff0c;可根据实际的产品需求进行扩展&#xff0c;也可以作为移动端原型设计的参考案例。为提升本作品参考价值&#xff0c;在模板设计过程中尽量追求…

chatGPT应用于房地产行业

作为 2023 年的房地产专业人士&#xff0c;您无疑认识到技术对行业的重大影响。近年来&#xff0c;一项技术进步席卷了世界——人工智能。人工智能彻底改变了房地产业务的各个方面&#xff0c;从简化管理任务到增强客户互动。 在本文中&#xff0c;我们将探讨几种巧妙的人工智…

HTML 语言简介

1.概述 HTML 是网页使用的语言&#xff0c;定义了网页的结构和内容。浏览器访问网站&#xff0c;其实就是从服务器下载 HTML 代码&#xff0c;然后渲染出网页。 HTML 的全名是“超文本标记语言”&#xff08;HyperText Markup Language&#xff09;&#xff0c;上个世纪90年代…

zabbix自动注册服务器以及部署代理服务器

文章目录 Zabbix自动注册服务器及部署代理服务器一.zabbix自动注册1.什么是自动注册2.环境准备3.zabbix客户端配置4.在 Web 页面配置自动注册5.验证自动注册 二.部署 zabbix 代理服务器1.分布式监控的作用&#xff1a;2.环境部署3.代理服务器配置4.客户端配置5.web页面配置5.1 …