成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

運維讓我優化SpringBoot啟動速度,我是這么干的!

運維
spring-graalvm-native是springBoo6/SpringBoot3 非常重大的一個特性,支持使用 GraalVM 將 SpringBoot 的應用程序編譯成本地可執行的鏡像文件,可以顯著提升啟動速度、峰值性能以及減少內存使用。

Spring Boot毫無疑問是 Java 后端開發的第一大框架,基于Spring Boot有著一套完整的工具鏈,各種各樣的starter。對于日常業務開發而言,可以說是輪子很全。

但隨著微服務和云原生時代的流行,Spring Boot應用卻暴露出了一些問題,其中比較突出的有:

  • 啟動慢
  • 應用內存占用多
  • 云原生應用對啟動速度的要求比較高。當需要進行水平擴展時,要求這些新的實例必須在足夠短的時間內完成啟動,從而盡快的處理新增的請求。
  • 云原生應用要求在運行時占用盡可能少的資源。盡可能的減少單個實例占用的資源,就意味著可以用同樣的成本,支持更多的訪問請求。
  • 云原生應用要求更小的打包體積。云原生應用以容器鏡像的形式打包。應用鏡像的尺寸越大,所需要的存儲空間也會越大,推送和拉取鏡像所耗費的時間也會更長。

其實我們都比較清楚大部分的啟動時間是由于 Spring 需要加載各種 Bean 導致啟動速度下降的

一、延遲初始化Bean

一般在 SpringBoot 中都擁有很多的耗時任務,比如數據庫建立連接、初始線程池的創建等等,我們可以延遲這些操作的初始化,來達到優化啟動速度的目的。Spring Boot 2.2 版本后引入
spring.main.lazy-initialization屬性,配置為 true 會將所有 Bean 延遲初始化。

spring:
  main:
    lazy-initialization: true

個人本地開啟延遲初始化之后,啟動能快了1~2秒。

環境

配置

(十次平均值)啟動速度

springboot2+jdk1.8


≈10.3s


延遲初始化Bean

≈8.63s

二、創建掃描索引

Spring5 之后提供了spring-context-indexer功能,可以通過在編譯時創建一個靜態候選列表來提高大型應用程序的啟動性能。

先看官方的解釋:

在項目中使用了@Indexed之后,編譯打包的時候會在項目中自動生成META-INT/spring.components文件。

當Spring應用上下文執行ComponentScan掃描時,META-INT/spring.components將會被CandidateComponentsIndexLoader 讀取并加載,轉換為CandidateComponentsIndex對象,這樣的話@ComponentScan不在掃描指定的package,而是讀取CandidateComponentsIndex對象,從而達到提升性能的目的.

我們只需要將依賴引入,然后在啟動類上使用@Indexed注解即可。這樣在程序編譯打包之后會生成
META-INT/spring.components文件,當執行@ComponentScan掃描類時,會讀取索引文件,提高掃描速度。

<dependency>
  	<groupId>org.springframework</groupId>
  	<artifactId>spring-context-indexer</artifactId>
  	<optional>true</optional>
</dependency>
@Indexed
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

環境

配置

(十次平均值)啟動速度

springboot2+jdk1.8


≈10.3s


+延遲初始化Bean

≈8.63s


+創建掃描索引

≈7.7s

其他技巧:

1、減少@ComponentScan @SpringBootApplication掃描類時候的范圍

2、關閉 Spring Boot 的 JMX監控,設置spring.jmx.enabled=false

3、設置JVM參數 -noverify ,不對類進行驗證

4、對非必要啟動時加載的Bean,延遲加載5、使用Spring Boot的全局懶加載一

5、AOPQ切面盡量不使用注解方式,這會導致啟動時掃描全部方法7、關閉endpoint的一些監控功能

6、排除項目多余的依賴jar

7、swagger掃描接口時,指定只掃描某個路徑下的類10、Feign 客戶端接口的掃描縮小包掃描范圍

到這啟動速度應該算是優化的比較極致了, 但是內存占用大依然是問題

三、 升級jdk17

當然jdk也在這方面做了很大的努力:

內存占用多主要是內存占用后不會歸還操作系統,這個正在逐步改善:

  • G1 JDK12及之后 已支持
  • ZGC JDK13及之后 已支持

于Java語言的特性及Spring Boot的一些實現方式,決定了即便是開啟了G1/ZGC的未使用內存及時歸還操作系統,Spring Boot的內存占用,仍然遠大于Golang這種編譯型語言。

所以,Java想要解決云原生時代的問題,目前的方案基本都是基于GraalVM來的,不管是Quarkus(夸克)還是Micronaut都是。

那么,Spring Boot有沒有類似的方案呢?:spring-graalvm-native

四、升級SpringBoot3

spring-graalvm-native是springBoo6/SpringBoot3 非常重大的一個特性,支持使用 GraalVM 將 SpringBoot 的應用程序編譯成本地可執行的鏡像文件,可以顯著提升啟動速度、峰值性能以及減少內存使用。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2019-02-01 08:41:17

運維ITLinux

2021-06-07 08:28:26

人工智能AI機器人

2012-08-15 14:58:01

運維架構師

2019-05-15 08:29:56

Web面板運維

2020-12-09 11:00:44

Nginx 運維Tomcat

2015-01-28 13:10:55

2015-10-09 15:34:42

訪談運維現狀

2020-06-09 15:15:31

運維中臺技術

2024-02-21 23:03:56

代碼系統

2018-11-05 17:06:02

OpenStack運維云平臺

2021-03-22 08:58:23

程序員產品經理

2018-02-25 11:00:34

代碼開發程序員

2020-12-21 08:32:07

內存性能優化

2021-04-26 06:03:07

Reacterror前端

2019-06-28 11:09:41

運維Linux工程師

2020-08-09 17:44:51

Python數據分析工具

2010-01-21 22:19:25

網絡優化運維管理摩卡軟件

2020-08-14 09:11:29

RedisQPS數據庫

2014-08-13 11:20:10

創業者

2023-03-21 17:06:24

樹莓派路由器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品久久一区 | 成人影院免费视频 | 久久精品国产一区二区三区 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 成人在线视频观看 | 久久香蕉精品视频 | 日韩一区二区三区在线视频 | 日本不卡一区 | 色综合一区二区三区 | 久久黄色| 国产精品国产馆在线真实露脸 | 中文字幕一区二区三区在线观看 | 欧美国产精品一区二区三区 | 一区二区三区播放 | 久久久91 | 亚洲欧美综合 | 色吊丝2288sds中文字幕 | 一级免费看 | 羞视频在线观看 | 91精品久久久久久久久久小网站 | 免费毛片网 | 亚洲一级二级三级 | 午夜小视频在线观看 | 久久精品小视频 | 亚洲一区视频 | 久久69精品久久久久久久电影好 | 国产精品亚洲综合 | 91精品91久久久 | 日韩在线不卡视频 | 久久久久亚洲精品 | 亚洲日本激情 | 成人综合视频在线观看 | 免费看爱爱视频 | 九九在线精品视频 | 一区二区三区四区不卡 | 精品久久不卡 | 成人一级片在线观看 | 一级在线观看 | 波多野结衣一二三区 | 日韩国产精品一区二区三区 | 亚洲综合色 |