日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

關于Java程序服務預熱那些事

來源: 責編: 時間:2024-03-18 09:38:20 187觀看
導讀一、背景1.1 什么是服務預熱所謂服務預熱,就是在服務啟動完成到對外提供服務之前,針對特定場景提供一些初始化準備操作。比如線程池預熱、緩存預熱、數據庫預熱、web預熱和JVM預熱等。1.2 為什么要預熱因為服務剛啟動的

一、背景

1.1 什么是服務預熱

所謂服務預熱,就是在服務啟動完成到對外提供服務之前,針對特定場景提供一些初始化準備操作。5a028資訊網——每日最新資訊28at.com

比如線程池預熱、緩存預熱、數據庫預熱、web預熱和JVM預熱等。5a028資訊網——每日最新資訊28at.com

1.2 為什么要預熱

因為服務剛啟動的時候需要一段磨合期,這段期間,服務運行狀態沒有達到最佳。因此,如果這時候一下子將服務流量提升到正常水平,就有可能導致大量請求超時或者瞬間將系統壓垮。5a028資訊網——每日最新資訊28at.com

針對 Web 應用的場景,將Java程序啟動分為兩個過程:5a028資訊網——每日最新資訊28at.com

1、啟動過程:是指從JVM 啟動到程序初始化完成能響應第一個請求的階段。由于啟動時需要動態類加載和程序啟動時的初始化,導致啟動會比較慢。啟動慢會影響程序的響應度,減慢 Web 應用擴容。5a028資訊網——每日最新資訊28at.com

2、預熱過程:是指從JVM 啟動到程序優化完成、達到性能峰值的階段。預熱慢會導致 Web 應用無法及時的處理完用戶請求,造成大量請求超時。5a028資訊網——每日最新資訊28at.com

圖片圖片5a028資訊網——每日最新資訊28at.com

二、如何預熱

2.1 預熱緩存

a.連接池預熱

和數據庫連接池一樣,我們可以在應用啟動時,根據需要初始化若干連接放入連接池,從而避免請求過來的時候再創建而影響性能。5a028資訊網——每日最新資訊28at.com

系統啟動時,嘗試獲取若干連接(這里取最小閑置),此時連接池為空,生成連接后會放入連接池,等請求進來的時候就不會再去創建連接了。5a028資訊網——每日最新資訊28at.com

圖片圖片5a028資訊網——每日最新資訊28at.com

b.熱點數據預熱

  • 數據存到redis中

處理方案:5a028資訊網——每日最新資訊28at.com

1、配置一個定時任務,刷新緩存數據。5a028資訊網——每日最新資訊28at.com

2、直接寫個緩存刷新頁面,上線后手動刷新。5a028資訊網——每日最新資訊28at.com

  • 數據存到本地

對于一些訪問度特別高的熱點數據,在極端情況下,考慮到服務到redis有網絡延遲以及序列化和反序列化消耗,所以放入redis緩存是不太理想的。5a028資訊網——每日最新資訊28at.com

那么對于這些數據我們可以考慮放入本地緩存,當然這些數據量不能太大。對于極端的熱點數據放入本地緩存后,請求獲取數據在應用維度基本沒有任何消耗,沒有網絡延遲也沒有序列化和反序列化消耗。5a028資訊網——每日最新資訊28at.com

可以使用guava 的cache5a028資訊網——每日最新資訊28at.com

2.2 預熱線程池

1)請求接收線程池

以tomcat為例,我們可以配置初始化創建線程的數量來做線程池預熱。5a028資訊網——每日最新資訊28at.com

圖片5a028資訊網——每日最新資訊28at.com

2)自定義線程池

對于自定義線程池,初始化時候調用prestartAllCoreThreads方法即可。5a028資訊網——每日最新資訊28at.com

圖片5a028資訊網——每日最新資訊28at.com

3)預熱DB連接池

服務啟動時根據需要創建若干數據庫連接,放到連接池中,然后應用啟動處理數據庫讀寫請求時,可以直接從連接池中拿連接來用,避免了讀寫請求創建連接并放入連接池的流程耗時。5a028資訊網——每日最新資訊28at.com

我們常用的連接池Druid提供了比較方便的連接池預熱能力。常見的配置方式:5a028資訊網——每日最新資訊28at.com

圖片5a028資訊網——每日最新資訊28at.com

4)JVM預熱

大家都知道,Java語言是解釋執行和編譯執行共同存在的。即Java源代碼文件(.java)首先由Javac編譯為字節碼(.class),然后字節碼由各操作系統對應的虛擬機解釋或編譯執行。5a028資訊網——每日最新資訊28at.com

為了提高執行速度,引入了JIT(Just-in-time compilation)。在運行時,JIT會把編譯過來的機器碼保存起來,以便下次使用。JIT只會對經常執行的熱點代碼進行編譯,如循環,高頻度使用的方法等。5a028資訊網——每日最新資訊28at.com

JVM默認開啟JIT編譯,可以檢查啟動參數-Xint和-Djava.compiler=NONE,如果有說明關閉了JIT,根據需要可以移除重新開啟JIT。5a028資訊網——每日最新資訊28at.com

此外,JDK1.8引入了Lambda表達式,給開發人員帶來了很多方便,但是過度的使用Lambda表達式也會帶來負面效果。lambda表達式的原理是在執行時生成匿名內部類,并且需要加載和編譯。5a028資訊網——每日最新資訊28at.com

所以對于一些熱點代碼可以選擇不使用Lambda表達式,或者在服務啟動時進行預調用,經過充分的調用之后使其成為熱點代碼,后續的調用就會走JIT編譯,就會跳過生成匿名內部類、加載的步驟,也就提升了執行效率。5a028資訊網——每日最新資訊28at.com

三、預熱的問題及解決

3.1 時長

既然在服務啟動階段加入了預熱邏輯,就會產生損耗,最直接的體現就是服務啟動時間變長,可能幾分鐘到十幾分鐘不等。5a028資訊網——每日最新資訊28at.com

但啟動慢不一定就是壞事,相當于是在對外提供服務之前做了充足的初始化以及預熱準備。5a028資訊網——每日最新資訊28at.com

當然事情都有兩面性,關鍵的是要在啟動快與慢之間找到一個平衡點,在保證服務能夠在可接受的時間內啟動,并且上線之后短時間內就能提供高質量的服務。5a028資訊網——每日最新資訊28at.com

3.2 CPU升高

在實際應用過程中,遇到了CPU突增的情況。如下圖,服務在啟動時會收到CPU報警,查看監控發現CPU使用率是平時的2倍以上。5a028資訊網——每日最新資訊28at.com

圖片圖片5a028資訊網——每日最新資訊28at.com

查看啟動時的預熱代碼,發現會觸發下面的請求,如圖,請求量是平時正常水平的幾百倍。因此定位應該是預熱代碼的問題。5a028資訊網——每日最新資訊28at.com

圖片圖片5a028資訊網——每日最新資訊28at.com

預熱代碼如下:5a028資訊網——每日最新資訊28at.com

圖片圖片5a028資訊網——每日最新資訊28at.com

圖片圖片5a028資訊網——每日最新資訊28at.com

上述代碼使用CountDownLatch作為計數器,在服務啟動時,觸發三個熱點接口,以達到預熱的目的。但是由于參數過多導致服務的請求激增,引發報警。5a028資訊網——每日最新資訊28at.com

問題定位之后,我們降低了入參數量,減少了循環次數,從而減少了服務自請求次數,問題得以修復。5a028資訊網——每日最新資訊28at.com

四、總結

以上是服務預熱的一些常見方式,服務預熱是把雙刃劍,在使用之前,需要搞清楚哪些服務需要預熱。對于需要預熱的服務,需要搞清楚具體需要預熱哪些內容,不能盲目預熱,容易適得其反。5a028資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-76493-0.html關于Java程序服務預熱那些事

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 我應該使用按鈕還是鏈接

下一篇: RabbitMQ代碼篇之過期時間,死信隊列,延遲隊列,優先級隊列的基本使用

標簽:
  • 熱門焦點
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • 如何通過Python線程池實現異步編程?

    線程池的概念和基本原理線程池是一種并發處理機制,它可以在程序啟動時創建一組線程,并將它們置于等待任務的狀態。當任務到達時,線程池中的某個線程會被喚醒并執行任務,執行完任
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動設備上有一個固定元素,當激活虛擬鍵盤時,該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認行為,在本文中,我們將探討這個問題、為什么會發生
  • 慕巖炮轟抖音,百合網今何在?

    來源:價值研究所 作者:Hernanderz“難道就因為自己的一個產品牛逼了,從客服到總裁,都不愿意正視自己產品和運營上的問題,選擇逃避了嗎?”這一番話,出自百合網聯合創
  • 阿里瓴羊One推出背后,零售企業迎數字化新解

    作者:劉曠近年來隨著數字經濟的高速發展,各式各樣的SaaS應用服務更是層出不窮,但本質上SaaS大多局限于單一業務流層面,對用戶核心關切的增長問題等則沒有提供更好的解法。在Saa
  • 機構稱Q2國內智能手機銷量同比下滑4% vivo份額重回第1

    7月29日消息,根據市場調查機構Counterpoint Research公布的最新報告,2023年第2季度中國智能手機銷量同比下降4%,創新自2014年以來第2季度銷量新低。報
  • 三星Galaxy Z Fold5今日亮相:厚度縮減但仍略顯厚重

    據官方此前宣布,三星將于7月26日也就是今天在韓國首爾舉辦Unpacked活動,屆時將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • Android 14發布:首批適配機型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機,同時發布了Androi
  • 質感不錯!OPPO K11渲染圖曝光:旗艦IMX890傳感器首次下放

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
Top 主站蜘蛛池模板: 司法| 新昌县| 静安区| 平武县| 邯郸县| 启东市| 明水县| 宕昌县| 河源市| 肃宁县| 汕尾市| 溧水县| 邵阳市| 周至县| 玉屏| 沾化县| 汕尾市| 湄潭县| 武威市| 花莲市| 临颍县| 武平县| 玉山县| 克东县| 竹山县| 鹿邑县| 邵武市| 舞钢市| 盐山县| 峨眉山市| 永平县| 廉江市| 海伦市| 汽车| 饶平县| 闵行区| 马关县| 和林格尔县| 凉城县| 贵州省| 定兴县|