亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么優化spring?boot應用

發布時間:2022-02-22 15:05:35 來源:億速云 閱讀:340 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“怎么優化spring boot應用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“怎么優化spring boot應用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    前言

    taptap-developer是一個spring boot框架驅動的純Grpc服務,所以,只用了四步,移除了web和spring cloud相關的模塊后,啟動速度就穩穩的保持在了6s內。除了啟動速度提升外,在服務待機狀態下,內存銳減了50%左右,從500M左右的內存占用,縮減到了250M不到。

    分析日志

    怎么優化spring?boot應用

    日志是一個應用的門面,在未深入了解一個應用的架構前,通過啟動的日志輸出基本可以分析出這個應用的大概的技術構成。在分析日志之前,在強調一點,這個應用是一個純Grpc的服務。如上圖貼出的日志,是未優化前的系統日志輸出,從上到下有四個紅色箭頭指向,是本次日志分析的關鍵信息,下面就這四個關鍵信息,分別分析下。然后總結出常見的優化方法

    優化點一:關于SPRING DATA REPOSITORY SCANNING

    Spring Data repository是一個高度抽象的數據訪問層接口,常見的實現有redis、jdbc、jpa、MongoDB、elasticsearch等等。實現一個Spring-data-xxx包,需要實現

    org.springframework.data.repository.core.support.RepositoryFactorySupport抽象類

    然后在!/META-INF/spring.factories文件中定義好實現類。spring容器啟動時,會掃描加載factories的信息。如果一個項目里有被掃描到有多個spring-data-xxx的實現,啟動時日志就會打印

    Multiple Spring Data modules found, entering strict repository configuration mode!

    優化:看到這個日志,我們就需要檢查下項目中是否用到了這些功能,比如引入了spring-data-redis,其實只用到了其攜帶的jedis,而且jedis實例可能還是自己實例化的,這個時候就可以禁用repository的功能。參考配置如下:

    spring.data.redis.repositories.enabled=false

    Spring Data repository有三種內置的初始化模式,分別對應如下:

    • DEFAULT:和Spring其他Bean一樣,在容器上下文加載時就初始化

    • DEFERRED:惰性加載,容器上下文啟動完成后開始初始化

    • LAZY:惰性加載,并且延遲注入,容器上下文啟動完成接收第一個請求時開始初始化
      如日志輸出:Bootstrapping Spring Data repositories in DEFAULT mode,默認是隨容器啟動就開始初始化的

    優化:這里可以根據業務特點,選擇延遲加載,

    參考配置spring.data.jpa.repositories.bootstrap-mode=lazy

    Spring Data repository會掃描項目中的實現了repository接口的類,默認情況下會盲掃所有的jar包,

    日志輸出:Finished Spring Data repository scanning in 148ms. Found 0 repository interfaces.

    打印出了掃描repository接口的耗時情況。

    優化:

    這里可以通過@EnableRedisRepositories(basePackages = "com.taptap")指定掃描的路徑

    可以顯著提升掃描加載的速度

    優化點二:關于WEBAPPLICATIONCONTEXT

    在spring中,WebApplicationContext是ApplicationContext的增強,由spring-web-mvc實現,增加了servlet、session等web相關的內容。

    從日志Initializing Spring embedded WebApplicationContext可以看出,我們初始化了一個web容器,而純Grpc服務用不到Web的容器上下文,所以移除如下依賴即可

    優化:

    移除implementation('org.springframework.boot:spring-boot-starter-web')

    優化點三:關于SERVLET容器

    spring-web-mvc是基于java web標準servlet設計架構的。而servlet是由servlet容器來驅動的,常見的servlet有tocmat、jetty、undertow等。從日志中可看出,我們啟動了一個8081的servlet容器。這個不應該出現在純Grpc的服務中,所以,直接移除即可。

    優化:

    移除implementation 'org.springframework.boot:spring-boot-starter-undertow'

    優化點四:關于ARCHAIUS配置組件

    從最后一個箭頭指向的日志信息可以分析出,項目引入了archaius配置加載組件,所以項目在啟動時,archaius會嘗試去加載默認策略的配置源。而我們整體的技術棧,配置中心統一采用了apollo,所以可以直接移除,最后通過分析定位,archaius不是單獨引入的,是隨著spring-cloud-starter-netflix-hystrix一同引入,這個組件是spring-cloud-netflix微服務框架最常用的,但是在這邊,目前所有的微服務都是直接注冊到k8s容器的,所有服務的熔斷、限流、負載均衡都下沉到了容器基數設施平臺,所以應用層面雖然引入了這個包,其實沒有實際作用,所以最后移除spring cloud相關組件

    優化:

    移除implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'和

    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-hystrix'組件、

    附優化后的日志輸出:

    怎么優化spring?boot應用

    系統資源的變化

    優化前的

    怎么優化spring?boot應用

    優化后的

    怎么優化spring?boot應用

    最后,基于資源監控圖,從三個維度總結下,優化后的資源占用情況:

    資源名稱優化前優化后
    內存500M左右250M左右
    總線程數10778
    裝載類1292210041

    讀到這里,這篇“怎么優化spring boot應用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    汉中市| 洱源县| 凤台县| 苍溪县| 杂多县| 屏山县| 南乐县| 山东省| 涡阳县| 伊通| 宁陵县| 饶河县| 西安市| 遂川县| 廊坊市| 射洪县| 阳原县| 新泰市| 通江县| 贺兰县| 翁牛特旗| 来宾市| 万州区| 马关县| 沙雅县| 临城县| 藁城市| 丰宁| 咸阳市| 饶平县| 保康县| 霍林郭勒市| 漳浦县| 承德县| 丽江市| 弋阳县| 延边| 佳木斯市| 遵义县| 宝山区| 苍山县|