[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.pswp.cn/news/36955.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36955.shtml
英文地址,請注明出處:http://en.pswp.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 …