<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

JSF業務線程池的大小配置用例說明

OSC開源社區 ? 來源:OSCHINA 社區 ? 2023-09-19 11:15 ? 次閱讀

1. 簡介

JSF 業務線程池使用 JDK 的線程池技術,缺省情況下采用 Cached 模式(核心線程數 20,最大線程數 200)。此外,還提供了 Fixed 固定線程大小的模式,兩種模式均可設置請求隊列大小。

本文旨在通過一個簡化場景(“單服務應用”)下的負載測試,為 “JSF 業務線程池大小配置” 提供基準測試結果,并形成一些普遍適用的結論。

本文的目標讀者包括需要合理配置 JSF 線程大小的壓測工程師、開發部署運維工程師以及架構師。

本文不涉及 JSF 服務端的其他配置項,也不針對 “復合服務應用” 的合理配置進行探討。你可以利用本文提供的結論,作為設計壓測用例或評估業務線程池大小的基本方法的參考,以便在實踐中合理配置 JSF 業務線程池大小。需要注意的是,JSF 業務線程池大小的合理配置應該基于高保真的負載測試結果。

“單服務應用” 指應用僅包含一個提供接口,且接口中僅有一個方法。 “復合服務應用” 則指應用包含多個提供接口或一個接口中含有多個方法。

2. 測試用例說明

本次基準測試選取了 USF3.0 權限系統,將其定制化為一個單一的服務提供者,僅對該提供者的一個方法進行了測試,因此可以看作是一個 “單服務應用”。

測試中將 CPU 作為基準測試的核心資源,并考慮到 JVM 垃圾收集器的影響,采用了簡單的測試數據以保證服務每次調用的一致性,并確保 YGC 具有規律性(即固定調用量會導致一次 30+ms 的 YGC),無 FGC 的影響。

測試用例的設計中,所有依賴的服務資源都無限制,以確保測試過程中服務的可用率達到 100%。我們的關鍵性能指標是 TP99,即服務響應時長的 99% 必須小于 10ms。

為了測試不同線程池模式下的性能表現,我們使用了 JSF 線程池的 Cached 和 Fixed 兩種模式,并針對每種模式進行了多組測試,以得出在滿足 TP99<10ms 的前提下,系統最大的負載情況。

測試應用:USF3.0 權限系統 (定制化處理) 測試服務:com.jd.susf.service.api.SusfPermissionService#findUserInfo,根據用戶信息從 Redis 中查詢一條數據返回的服務。

硬件配置:單臺 4C 8G 測試方法:在 Forcebot 系統采用了階梯發壓的方式對 JSF 業務線程池在 Cached 和 Fixed 模式下進行了系統負載測試 擬定 SLA 要求:服務響應時長的 TP99<10ms

注:我們對 USF3.0 權限系統進行了定制,調整了服務提供方的配置數據,僅保留了 com.jd.susf.service.api.SusfPermissionService。

3. 測試結果及分析

3.1.cached 線程池的系統負載

圖:JSF 默認線程池 (cached, threads=200) 在不同并發用戶數 (1-200) 下的系統負載圖

并發用戶數 TP99 吞吐量 TPS CPU 利用率 (%)
1~23 <8ms 線性增長 線性增長
24 8ms 6553 99.62
25 11ms 6607 99.83
26~79 迅速增長 緩慢增長 99+
80 74ms 6928 99.82
81~199 緩慢增加 緩慢下降 99.82
200 99ms 6230 99.94

小結:默認的 JSF 線程池配置存在很大的風險。系統最大可支持 24 個并發,超過 24 個并發 SLA 就無法滿足。

3.2 fixed 線程池 (隊列) 的系統負載

圖:JSF 固定線程池 (fixed + 隊列) 在不同并發用戶數 (1-50) 下的系統負載圖

JSF 業務線程數 可支持的最大并發用戶數 TP 值 (50/90/99/999) 吞吐量 (TPS) CPU 最大利用率(%)
4 11 7/8/10/18 1531 27.67
8 25 8/8/10/18 3113 46.45
16 50 8/8/10/21 6228 87.97
20 23 3/4/10/15 6409 99.92
24 22 3/4/7/15 6178 99.86
25 22 3/4/6/15 6182 98.83

表:JSF 固定業務線程池 (fixed + 隊列) 在滿足 TP99<10ms 的系統最大負載(最大并發用戶數)

小結: ① 在 fixed 線程模式下,CPU 的利用率存在使用上限。

② 隊列的使用可以有效增加系統對并發量的支持,同時也會帶來吞吐量的提升。然而,由于任務在隊列中等待,服務的響應時間會出現 “水漲船高” 的現象,存在一定風險。

3.3 fixed 線程池的系統負載

圖:JSF 固定線程池 (fixed) 模式下,系統最大并發用戶數時的系統負載

JSF 業務線程數 并發用戶數 TP99 吞吐量 (TPS) CPU 最大利用率(%)
4 4 5 1063 20.26
8 8 5 2216 36.62
16 16 6 4262 68.56
20 20 5 5550 86.22
24 24 8 6711 99.62
25 25 16 6644 98.77
26 26 19 6744 99.93

小結:綜合固定線程池 (fixed) 的性能表現,需要設置一個合理的線程數大小來平衡 CPU 資源的充分利用和滿足 SLA 的需求,線程數過小會導致 CPU 資源浪費,線程數過大則無法滿足 SLA

4. 結論

根據測試結果和數據分析,我們得出以下結論:

JSF 線程池的默認配置在并發量高的場景下存在風險:所有線上生產環境中的 JSF 服務所在的服務器,很少有能夠在 200 個線程的情況下還能夠滿足 SLA 的。最大 200 個線程的線程池配置,將服務器置于 “并發量高的場景下被壓垮” 的風險中。線程池大小的合理配置應該來自高保真的負載測試。

足量的線程數才能保證資源 (CPU) 的利用率:業務型的服務通常都存在一定的 IO 操作(網絡,磁盤等),線程執行過程中會發生等待,CPU 利用率不高,需要增加并發的線程數量,讓更多的線程參與 CPU 的分配,才能提高 CPU 的利用率。服務中 IO 操作越多,等待時長越長,需要的并發線程就越多。對于有 IO 操作的業務型服務,負載測試的線程數可以從 2N(N 是服務器的 CPU 核數)開始。

過多的線程數只會降低系統的 SLA:當線程數已能 100% 利用 CPU 后,增加線程數,線程就無法獲取足夠的 CPU 分配,這樣服務的響應時間就會增大。

在一定范圍內,TP99 還可能滿足 SLA 的要求,系統的吞吐量也會有少量的增加。再持續增加線程數,TP99 就無法滿足系統的要求,系統的吞吐量也會開始下降。

固定的線程數可以保護系統需要承擔的負載能力:固定線程數可以保證系統對 CPU 的利用率限定在一定的負載范圍內,保護系統穩定運行,保證響應時間 TP99,但也限定了系統的并發能力。

合理設置隊列大小可以增加系統的并發度,也不會影響系統 TP99,但會整體拉高服務的響應時間,出現不穩定性的變化,存在風險。

讓 CPU100% 的高負載運行:通常服務對外的 SLA 承諾通常高于服務真實的性能,這是因為我們考慮了基礎設施及依賴服務的不穩定性。

因此,即使 CPU 已經達到了 100%,我們仍然可以增加一定數量的線程數,而不會影響對外的響應時間 TP99 的承諾。這樣可以提高系統的并發能力。雖然系統可以在高負載下運行,但我們需要進一步進行穩定性測試,以提高系統的可靠性。

綜上所述,線程池大小的合理配置需要結合業務需求和系統資源情況進行評估和測試,并預留合理的 buffer 空間,以保證系統穩定運行和滿足用戶的 SLA。

5. 附錄

附錄一:統計指標及術語說明

并發用戶數:同時發起請求的用戶數。

TP 值 (50/90/99/999):客戶端的 TP 值,單位 ms,數據來源于 Forcebot。

吞吐量 TPS:數據來源于 Forcebot。

CPU 利用率 (%):數據來源于 PFinder。

JSF 業務線程數:JSF 業務線程池的線程數,如:

fixed/cached:JSF 業務線程池的線程池類型,如:





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • SLA
    SLA
    +關注

    關注

    1

    文章

    53

    瀏覽量

    18189
  • USF
    USF
    +關注

    關注

    0

    文章

    2

    瀏覽量

    8043
  • TPS
    TPS
    +關注

    關注

    0

    文章

    83

    瀏覽量

    36059
  • JSF
    JSF
    +關注

    關注

    0

    文章

    8

    瀏覽量

    7722
  • JVM
    JVM
    +關注

    關注

    0

    文章

    152

    瀏覽量

    12139

原文標題:談談JSF業務線程池的大小配置

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何設定RTOS中的任務棧(線程棧)大小呢?

    首先說明的是,在 `RT-Thread` 中,將本文提及的 `任務` 稱之為 `線程`。
    的頭像 發表于 12-01 16:40 ?834次閱讀

    USB八口MODEM USB八口MODEM

    MODEM USB貓 u***貓 Q2406A八口短信MODEM USB短信MODEM 大小
    發表于 06-28 15:28

    是什么 短信貓使用方法

    口改碼貓S08-XM、S16-XM),可完成短信、彩信、語音、飛信、MM客戶端、全曲下載、百寶箱、振鈴、手機閱讀、G+游戲、號碼管家、139郵箱、手機視頻、無線城市和WAP瀏覽等多項增值業務的手機端
    發表于 04-23 15:38

    內存可以調節內存的大小

    嵌入式–內存直接上代碼,自己體會。嵌入式設備,一般keil提供的堆很小,一般都不使用。使用內存,自己可以調節內存大小。頭文件 malloc.h#ifndef __MALLOC_H#define
    發表于 12-17 07:00

    線程是如何實現的

    線程的概念是什么?線程是如何實現的?
    發表于 02-28 06:20

    線程創建的兩種方法

    1. 使用內置模塊在使用多線程處理任務時也不是線程越多越好,由于在切換線程的時候,需要切換上下文環境,依然會造成cpu的大量開銷。為解決這個問題,線程
    發表于 03-16 16:15

    關于RT-Thread內存管理的內存簡析

    :支持線程掛起。內存無空閑內存塊時,申請線程會被掛起,直到有可用內存塊。簡單理解,就是將相同大小的內存塊通過某種方式放在一起,就好比將各個內存塊放在類似于水池的容器里,需要用的時候,
    發表于 04-06 17:02

    求助大佬,請問線程堆棧的作用以及大小如何設置?

    rt_thread_create( "a", thread_entry, RT_NULL,256,4 ,20); 中的256是堆??臻g。 這個堆棧是線程切換時保存現場的嗎?還是線程體中所用堆棧的
    發表于 05-24 15:23

    Pegasus智能家居套件樣開發--線程

    :[DevEco Device Tool 環境搭建]準備工程本采DevEco Device Tool工具進行開發,當配置完開發環境后,我們可以在IDE上進行工程的配置下載。打開De
    發表于 07-18 14:06

    JSF應用程序的結構

    JSF應用程序的結構:JSF 將表示和應用程序行為明確分開,JSF是一種事件驅動型的組件模型,請求處理生命周期包括6個階段,JSF頁面指向Bean屬性,
    發表于 12-08 11:06 ?23次下載

    如何使用JSF導航

    JSF應用程序的用戶界面由頁面設計人員設計。模型對象是由應用程序開發人員實現的開發一個JSF應用的步驟包括:開發模型對象、開發基于JSF用戶界面、編寫時間監聽器或者導航
    發表于 12-08 11:07 ?0次下載

    JSF標簽庫

    JSF標簽庫:JSF核心標簽庫,JSF HTML標簽庫,使用JSF標簽標簽         &
    發表于 12-08 11:10 ?39次下載

    jsf標簽官方幫助文檔

    Tag Library Documentation Generator - Generated DocumentationTag Libraries JSF core tag library.
    發表于 12-08 11:13 ?36次下載

    基于Hibernate與JSF的企業展臺系統設計

    在介紹Hibernate 及JSF 基礎上,提出了一種新的Web 系統開發方法。結合企業展臺系統設計實例研究如何整合基于MVC 模式的Hibernate 及JSF 技術。關鍵詞:MVC 模式;Hibernate;JSF;企
    發表于 08-22 10:58 ?14次下載

    JEB+JSF開發示例(附源代碼)

    剛到公司時沒有接觸過EJB3和JSF,為了熟悉一下做了個EJB+JSF開發示例來入門.一個比較簡單的JSF的web工程做頁面展現,一個簡單的EJB3工程做業務操作,分別部署到Tomca
    發表于 04-07 21:56 ?38次下載
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>