成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

tomcat 集群監控與彈性伸縮詳解

瀏覽:263日期:2023-03-19 16:51:51
目錄
  • 如何給 tomcat 配置合適的線程池
  • 如何監控 tomcat 線程池的工作情況
  • tomcat 線程池擴縮容
  • tomcat 是如何避免原生線程池的缺陷的

如何給 tomcat 配置合適的線程池

任務分為 CPU 密集型和 IO 密集型

對于 CPU 密集型的應用來說,需要大量 CPU 計算速度很快,線程池如果過多,則保存和切換上下文開銷過高反而會影響性能,可以適當將線程數量調小一些

對于 IO 密集型應用來說常見于普通的業務系統,比如會去查詢 mysql、redis 等然后在內存中做簡單的數據組裝和邏輯判斷,此時由于有 epoll、dma 等支持,消耗較長時間的線程不會長時間占據 CPU 時間,所以可以適當將線程數量調大一些

對于線程數到底該設置多大,網上有很多的方案

我們在實際情況中基于 wrk 等壓測工具進行壓測,壓測邏輯相對復雜請求量相對較高的接口先配置一個相對保守的值

先預估假設當前接口處理平均耗時 300MS,1S 一個線程平均處理 3 個請求,最大 100 個線程 1S 能處理 300 TPS

粗略估算每個請求會消耗多大的內容空間,假如是 2KB,那么每秒會消耗 600KB 以此來估算 YGC 多久會觸發一次,假設年輕代為 1GB 那么大約 29 分鐘觸發一次 YGC

然后再看 100 個線程持續處理 300TPS 的時候 CPU 消耗情況

觀察內存幾分鐘 GC 一次,或者 CPU 使用率穩定在 50% 左右就好,假設此時線程池 70 個線程都在運作

那么監控系統采集到線程池線程使用率達到了 80% 就開始擴容,因為擴容拉起新的服務器到提供服務可能也需要1-2分鐘的時間,所以需要預留服務器資源能夠處理彈性擴容期間的流量

實際場景中是相對比較復雜的,前期最好設置一個相對保守的擴容閾值,如果發現在達到這個閾值前服務器已經頂不住了就可以實時的縮小閾值

同時還可以根據在達到擴容閾值擴容的時候,觀察線上真實的 CPU 和內存使用情況,可以基于 promethues + grafana 來進行監控,如果發現擴容時候 CPU 使用率和內存使用率 GC 評率比較低,那么可以再配置中心動態的調整線程池的大小

所以說與其尋找一個準確的計算線程池數量的配置方式,不如提供一個可以動態調整的線程池作為 tomcat 的線程池

如何監控 tomcat 線程池的工作情況

spring boot 在啟動過程中會調用 TomcatProtocolHandlerCustomizer 的實現類,此處可以自定化 tomcat 線程池,也可以獲取到 tomcat 線程池

public class MyTomcatProtocolHandlerCustomizer implements TomcatProtocolHandlerCustomizer<ProtocolHandler> {    private final ThreadPoolExecutor tomcatThreadPoolExecutor;    public TomcatProtocolHandlerCustomizer(ThreadPoolExecutor tomcatThreadPoolExecutor) {this.tomcatThreadPoolExecutor = tomcatThreadPoolExecutor;    }    @Override    public void customize(ProtocolHandler protocolHandler) {protocolHandler.setExecutor(tomcatThreadPoolExecutor);    }    public ThreadPoolExecutor getThreadPoolExecutor() {return tomcatThreadPoolExecutor;    }}

然后將線程池裝入一個容器 bean 中注冊到 promethues 監控中,當每秒進行采集的時候通過回調的方法去獲取線程池的最新指標

promethues 每秒采集一次容器的線程池運行指標、服務器測 CPU 使用率當滿足定義的擴容閾值時就拉起新的 POD

grafana 每秒采集一次 promethues 的數據匯聚圖標展示

@Beanpublic AllServersThreadPoolCollector allServersThreadPoolCollector(@Qualifier(value = "GrpcThreadPoolExecutor") ThreadPoolExecutor GrpcThreadPoolExecutor,       @Qualifier(value = "jdTomcatThreadPoolExecutor") org.apache.tomcat.util.threads.ThreadPoolExecutor TomcatThreadPoolExecutor,       MeterRegistry registry) {    return new AllServersThreadPoolCollector(GrpcThreadPoolExecutor, jdTomcatThreadPoolExecutor, registry);}
public void init() {    try {createGauge(this, "grpc_tomcat_core_pool_size", pool -&gt; this.getCorePoolSize());createGauge(this, "grpc_tomcat_maximum_pool_size", pool -&gt; this.getMaximumPoolSize());createGauge(this, "grpc_tomcat_busy_pool_size", pool -&gt; this.getActiveCount());createGauge(this, "grpc_tomcat_wait_queue_size", pool -&gt; this.getWaitQueueSize());    } catch (Exception e) {log.error("注冊 all servers 監控失敗", e);    }}private void createGauge(AllServersThreadPoolCollector weakRef, String metric, ToDoubleFunction&lt;AllServersThreadPoolCollector&gt; measure) {    Gauge.builder(metric, weakRef, measure)    .register(this.registry);}public int getWaitQueueSize() {    return grpcThreadPoolExecutor.getQueue().size() + tomcatThreadPoolExecutor.getQueue().size();}

tomcat 線程池擴縮容

Java 線程池是支持直接修改 corePoolSize、maximumPoolSize 的

  • 修改 corePoolSize

(1)數量小于 maximumPoolSize 拋異常

(2)如果 corePoolSize - 原來的 = delta,delta 大于 0 那么創建等待隊列任務數量和 delta 個線程來處理等待處理的任務

(3)如果正在運行的線程數量 > corePoolSize 那么就中斷多余的線程

  • 修改 maximumPoolSize

(1)maximumPoolSize 小于 corePoolSize 拋錯

(2)如果運行的線程大于 maximumPoolSize 中斷掉一些空閑的線程

基于這些機制就能在運行期間動態調整線程池內容

無需擔心會中斷掉正在運行的任務,因為線程池 worker 線程每執行一個任務的時候

tomcat 是如何避免原生線程池的缺陷的

原生線程池的工作原理

(1)運行的線程數小于核心線程,就創建一個 worker 線程去執行任務

(2)運行的線程數 >= 核心線程了,將任務全部積壓到隊列中

(3)隊列如果滿了繼續創建非核心線程 worker 去執行任務

假如 tomcat 采用了原生線程池,核心線程為 10 個,最大線程為 100,隊列為 200,并發來了 100 個請求,那么同時系統只能處理 10 個,剩下 90 個都得放入隊列中讓 10 個核心線程慢慢排隊處理,延時必然非常高

tomcat 如何優化線程池,核心在于阻塞隊列的實現,因為阻塞隊列滿了才會繼續創建非核心 worker 線程處理任務

(1)運行的線程數小于核心線程,就創建一個 worker 線程去執行任務

(2)當前已經創建的核心+非核心線程數等于最大線程數,任務壓入隊列

(3)正在處理的請求數量小于核心+非核心線程數,任務壓入隊列

(4)當前已經創建的核心+非核心線程數小于最大線程數,創建 worker 線程處理請求

總結就是一句話當高并發流量過來的時候,會去創建最大線程數的 worker 去處理請求用以降低尾延遲,超過最大線程后,任務將被壓入隊列中進行處理

以上就是tomcat 集群監控與彈性伸縮詳解的詳細內容,更多關于tomcat 集群監控彈性伸縮的資料請關注其它相關文章!

標簽: Tomcat
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美精品一卡二卡| 视频精品一区二区| 久久精品欧美一区二区三区不卡 | 91麻豆成人久久精品二区三区| 久久99精品久久只有精品| 亚洲午夜久久久久久尤物| 欧美日韩黄视频| 亚洲国产中文字幕在线视频综合| 欧美91视频| 6080午夜不卡| 男人的j进女人的j一区| 在线天堂一区av电影| 久久青草欧美一区二区三区| 麻豆91小视频| 国产一区成人| 中文字幕中文字幕一区二区| 精品亚洲成a人在线观看| 国产欧美日韩一区二区三区在线| 国产欧美日韩另类一区| 国产99久久精品| 精品视频123区在线观看| 亚洲午夜免费福利视频| 在线欧美日韩| 国产网红主播福利一区二区| 成人精品国产福利| 欧美日韩国产精品自在自线| 亚洲成a人v欧美综合天堂下载| 黑人中文字幕一区二区三区| 久久青草欧美一区二区三区| 国产大陆a不卡| 欧美年轻男男videosbes| 午夜精品福利一区二区三区蜜桃| 亚洲免费精品| 欧美国产精品专区| 粉嫩欧美一区二区三区高清影视 | 葵司免费一区二区三区四区五区| 日韩电影在线一区二区三区| 91官网在线免费观看| 黄色小说综合网站| 日韩欧美一级精品久久| 色综合网色综合| 国产成人午夜精品影院观看视频| 在线播放视频一区| 久久91精品久久久久久秒播| 欧美午夜电影在线播放| 免费成人av资源网| 欧美亚洲综合网| 美日韩黄色大片| 欧美色图天堂网| 免费欧美在线视频| 美日韩精品视频| 亚洲九九爱视频| 一本不卡影院| 亚洲摸摸操操av| 国产九九精品| 午夜视黄欧洲亚洲| 日本高清不卡视频| 狂野欧美性猛交blacked| 欧美三级电影网站| 成人av小说网| 亚洲激情在线播放| 欧美日本精品一区二区三区| 91理论电影在线观看| 亚洲国产一区二区在线播放| 91精品国产综合久久久久久久| 欧美国产综合| 天天影视色香欲综合网老头| 日韩欧美一级二级| 亚洲国产欧洲综合997久久| 日韩激情一二三区| 欧美mv和日韩mv国产网站| 一本色道久久精品| 久久99精品久久久久久| 国产日韩精品一区| 久久精品动漫| 99久久久国产精品| 亚洲国产cao| 日韩欧美中文字幕精品| 99香蕉国产精品偷在线观看| 韩国一区二区在线观看| 国产精品三级电影| 亚洲久久成人| 亚洲电影中文字幕在线观看| 欧美午夜免费电影| 岛国av在线一区| 亚洲香肠在线观看| 精品国产伦理网| 久久不射2019中文字幕| 成人永久aaa| 亚洲国产精品久久不卡毛片| 精品国产不卡一区二区三区| 一区二区三区导航| 成人一区二区视频| 国产精品白丝在线| 午夜一级久久| 精品在线视频一区| 精品美女在线观看| 一本色道久久综合亚洲精品不| 日本欧美一区二区三区乱码| 日韩免费高清电影| 激情久久五月| 美女网站一区二区| 精品不卡在线视频| 亚洲国内欧美| 青青草视频一区| 欧美精品一区视频| 亚洲欧美国产不卡| 国产精品一品视频| 国产精品久久久久毛片软件| 老牛国产精品一区的观看方式| 国产一区 二区 三区一级| 欧美国产成人精品| 欧美精品久久99| 美脚丝袜一区二区三区在线观看 | 欧美激情一级片一区二区| 久久成人免费日本黄色| 《视频一区视频二区| 日韩一区二区三区三四区视频在线观看| 国产精品成人观看视频免费| 五月天网站亚洲| 久久综合九色综合欧美亚洲| 国产亚洲在线观看| 国产69精品久久777的优势| 亚洲你懂的在线视频| 欧美一级日韩一级| 亚洲国产免费| 国产专区综合网| 成人免费在线播放视频| 欧美伦理视频网站| 国内精品久久国产| 理论片日本一区| 国产女主播在线一区二区| 一本久久a久久精品亚洲| 91丨porny丨蝌蚪视频| 丝袜美腿亚洲一区二区图片| 久久综合一区二区| 老牛嫩草一区二区三区日本 | 91麻豆成人久久精品二区三区| 亚洲线精品一区二区三区八戒| 日韩精品一区二区三区视频播放 | 亚洲一区久久| av一区二区三区黑人| 婷婷亚洲久悠悠色悠在线播放| 精品成人一区二区三区四区| 麻豆成人在线| 欧美高清一区| 久久精品理论片| 一区在线中文字幕| 91精品福利在线一区二区三区| 在线一区视频| 99在线精品免费| 亚洲va在线va天堂| 2020国产成人综合网| 日本韩国欧美一区| 国产真实久久| 精品一区二区三区香蕉蜜桃| 亚洲免费在线播放| 欧美一区二区三区免费| 久久久精品动漫| 欧美日韩一区二区三区在线观看免| 蜜臀久久99精品久久久画质超高清| 国产精品免费视频观看| 日韩一区二区在线免费观看| 亚洲欧美网站| 亚洲视频高清| 成人黄页在线观看| 波多野结衣欧美| 欧美mv和日韩mv的网站| 欧美人牲a欧美精品| 欧美日韩一区二区在线观看| 欧美系列一区二区| 欧美午夜精品久久久久久孕妇| 91久久精品一区二区二区| 久久久久久久欧美精品| 久久婷婷av| 在线看一区二区| 欧美日韩国产首页| 在线播放91灌醉迷j高跟美女 | 国内成+人亚洲+欧美+综合在线 | 国产一区中文字幕| 国产精品一区不卡| 国产精品99久久久久| 成人一区二区视频| 91视频一区二区| 欧美国产三区| 精品9999| 亚洲女同同性videoxma| 亚洲在线观看| 亚洲综合首页| 在线看国产一区| 欧美日韩一区高清| 日韩欧美精品在线| 国产日韩欧美麻豆| 亚洲欧美另类久久久精品2019| 亚洲一区二区三区四区在线观看 | 午夜精品福利视频网站| 蜜臀国产一区二区三区在线播放| 国内精品免费在线观看| 成人国产免费视频| 国产在线精品二区|