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

[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.lryc.cn/news/129289.html

相关文章:

  • okhttp下载文件 Java下载文件 javaokhttp下载文件 下载文件 java下载 okhttp下载 okhttp
  • Oracle/PL/SQL奇技淫巧之Json转表
  • 每日一学——网络安全
  • python中的lstm:介绍和基本使用方法
  • 【Flink】Flink窗口触发器
  • 深度云化时代,什么样的云网络才是企业的“心头好”?
  • 【快应用】快应用广告学习之激励视频广告
  • 国产化系统中遇到的视频花屏、卡顿以及延迟问题的记录与总结
  • go内存管理机制
  • 【Python】Web学习笔记_flask(5)——会话cookie对象
  • 用友U8+CRM 任意文件上传+读取漏洞复现
  • 【量化课程】08_1.机器学习量化策略基础实战
  • Mongodb 更新集合的方法到底有几种 (中) ?
  • 预演攻击:谁需要网络靶场,何时需要
  • 【Linux】IO多路转接——poll接口
  • 系统架构设计师---OSI七层协议
  • Next.js - Route Groups(路由组)
  • musl libc ldso 动态加载研究笔记:01
  • 2023 年 4 款适用于安卓手机的最佳 PDF 转 Word 转换器
  • 前端:运用html+css+jquery.js实现截图游戏
  • Maven之JDK编译问题
  • 开发测试框架一 - 创建springboot工程及基础操作
  • 【IMX6ULL驱动开发学习】08.马达驱动实战:驱动编写、手动注册平台设备和设备树添加节点信息
  • 直方图均衡化和自适应直方图均衡化
  • 京东门详一码多端探索与实践 | 京东云技术团队
  • 数据挖掘 | 零代码采集房源数据,支持自动翻页、数据排重等
  • 迪米特法则
  • 云积天赫|AIGC+营销的排头兵
  • Oracle 数据库备份
  • 【C++】模板template