0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring Boot為什么這么耗內(nèi)存

汽車(chē)玩家 ? 來(lái)源:Java技術(shù)架構(gòu) ? 作者:Java技術(shù)架構(gòu) ? 2020-05-05 22:34 ? 次閱讀

Spring Boot總體來(lái)說(shuō),搭建還是比較容易的,特別是Spring Cloud全家桶,簡(jiǎn)稱(chēng)親民微服務(wù),但在發(fā)展趨勢(shì)中,容器化技術(shù)已經(jīng)成熟,面對(duì)巨耗內(nèi)存的Spring Boot,小公司表示用不起。如今,很多剛誕生的JAVA微服務(wù)框架大多主打“輕量級(jí)”,主要還是因?yàn)镾pring Boot太重。

JAVA系微服務(wù)框架

No1-Spring Cloud

介紹

有Spring大靠山在,更新、穩(wěn)定性、成熟度的問(wèn)題根本不需要考慮。在JAVA系混的技術(shù)人員大約都聽(tīng)說(shuō)過(guò)Spring的大名吧,所以不缺程序員……,而且這入手的難度十分低,完全可以省去一個(gè)架構(gòu)師。

但是,你必然在服務(wù)器上付出:

至少一臺(tái)“服務(wù)發(fā)現(xiàn) ”的服務(wù)器;

可能有一個(gè)統(tǒng)一的網(wǎng)關(guān)Gateway;

可能需要一個(gè)用于“分布式配置管理”的配置中心;

可能進(jìn)行“服務(wù)追蹤”,知道我的請(qǐng)求從哪里來(lái),到哪里去;

可能需要“集群監(jiān)控”;

項(xiàng)目上線后發(fā)現(xiàn),我們需要好多服務(wù)器,每次在集群中增加服務(wù)器時(shí),都感覺(jué)心疼;

壓測(cè)30秒

壓測(cè)前的內(nèi)存占用

Spring Boot為什么這么耗內(nèi)存

如圖,內(nèi)存占用304M。

壓測(cè)時(shí)的內(nèi)存占用

Spring Boot為什么這么耗內(nèi)存

如圖,內(nèi)存占用1520M(1.5G),CPU上升到321%

概覽

Spring Boot為什么這么耗內(nèi)存

總結(jié)

一個(gè)Spring Boot的簡(jiǎn)單應(yīng)用,最少1G內(nèi)存,一個(gè)業(yè)務(wù)點(diǎn)比較少的微服務(wù)編譯后的JAR會(huì)大約50M;而Spring Cloud引入的組件會(huì)相對(duì)多一些,消耗的資源也會(huì)相對(duì)更多一些。

啟動(dòng)時(shí)間大約10秒左右: Started Application in 10.153 seconds (JVM running for 10.915)

JAVA系響應(yīng)式編程的工具包Vert.x

介紹

背靠Eclipse的Eclipse Vert.x是一個(gè)用于在JVM上構(gòu)建響應(yīng)式應(yīng)用程序的工具包。定位上與Spring Boot不沖突,甚至可以將Vert.x結(jié)合Spring Boot使用。眾多Vert.x模塊提供了大量微服務(wù)的組件,在很多人眼里是一種微服務(wù)架構(gòu)的選擇。

華為微服務(wù)框架Apache ServiceComb就是以Vert.x為底層框架實(shí)現(xiàn)的,在"基準(zhǔn)測(cè)試網(wǎng)站TechEmpower"中,Vert.x的表現(xiàn)也十分亮眼。

壓測(cè)30秒

壓測(cè)前的內(nèi)存占用

Spring Boot為什么這么耗內(nèi)存

如圖,內(nèi)存占用65M。

壓測(cè)時(shí)的內(nèi)存占用

Spring Boot為什么這么耗內(nèi)存

如圖,內(nèi)存占139M,CPU占2.1%,給人的感覺(jué)似乎并沒(méi)有進(jìn)行壓測(cè)。

概覽

Spring Boot為什么這么耗內(nèi)存

總結(jié)

Vert.x單個(gè)服務(wù)打包完成后大約7M左右的JAR,不依賴(lài)Tomcat、Jetty之類(lèi)的容器,直接在JVM上跑。

Vert.x消耗的資源很低,感覺(jué)一個(gè)1核2G的服務(wù)器已經(jīng)能夠部署許多個(gè)Vert.x服務(wù)。除去編碼方面的問(wèn)題,真心符合小項(xiàng)目和小模塊。git市場(chǎng)上已經(jīng)出現(xiàn)了基于Vert.x實(shí)現(xiàn)的開(kāi)源網(wǎng)關(guān)- VX-API-Gateway幫助文檔

https://duhua.gitee.io/vx-api-gateway-doc

對(duì)多語(yǔ)言支持,很適合小型項(xiàng)目快速上線。

啟動(dòng)時(shí)間不到1秒:Started Vert.x in 0.274 seconds (JVM running for 0.274)

JAVA系其他微服務(wù)框架

SparkJava

jar比較小,大約10M

占內(nèi)存小,大約30~60MB;

性能還可以,與Spring Boot相仿;

Micronaut

Grails團(tuán)隊(duì)新寵;

可以用 Java、Groovy 和 Kotlin 編寫(xiě)的基于微服務(wù)的應(yīng)用程序;

相比Spring Boot已經(jīng)比較全面;

性能較優(yōu),編碼方式與Spring Boot比較類(lèi)似;

啟動(dòng)時(shí)間和內(nèi)存消耗方面比其他框架更高效;

多語(yǔ)言;

依賴(lài)注入;

內(nèi)置多種云本地功能;

很新,剛發(fā)布1.0.0

Javalin

上手極為容易;

靈活,可以兼容同步和異步兩種編程思路;

JAR小,4~5M;

多語(yǔ)言;

有KOA的影子;

只有大約2000行源代碼,源代碼足夠簡(jiǎn)單,可以理解和修復(fù);

符合當(dāng)今趨勢(shì);

多語(yǔ)言;

嵌入式服務(wù)器Jetty;

Quarkus

啟動(dòng)快;

JAR小,大約10M;

文檔很少;

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    2902

    瀏覽量

    73536
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2943

    瀏覽量

    104094
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用Spring Boot 3.2虛擬線程搭建靜態(tài)文件服務(wù)器

    Spring Boot 3.2 于 2023 年 11 月大張旗鼓地發(fā)布,標(biāo)志著 Java 開(kāi)發(fā)領(lǐng)域的一個(gè)關(guān)鍵時(shí)刻。這一突破性的版本引入了一系列革命性的功能。
    的頭像 發(fā)表于 01-09 09:34 ?1008次閱讀
    使用<b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 3.2虛擬線程搭建靜態(tài)文件服務(wù)器

    如何在Spring Boot應(yīng)用程序中整合ZXing庫(kù)

    在數(shù)字化時(shí)代,二維碼已經(jīng)成為了信息交流的一種常見(jiàn)方式。它們被廣泛用于各種應(yīng)用,從產(chǎn)品標(biāo)簽到活動(dòng)傳單,以及電子支付。本文將向您展示如何在Spring Boot應(yīng)用程序中整合ZXing庫(kù),以創(chuàng)建和解析QR碼。
    的頭像 發(fā)表于 12-03 17:39 ?966次閱讀

    Spring Boot 3.2支持虛擬線程和原生鏡像

    Spring Boot 3.2 前幾日發(fā)布,讓我們用 Java 21、GraalVM 和虛擬線程來(lái)嘗試一下。
    的頭像 發(fā)表于 11-30 16:22 ?584次閱讀

    Spring布能用來(lái)搭建基礎(chǔ)架構(gòu)嗎

    Spring Boot 是一個(gè)用于簡(jiǎn)化 Spring 應(yīng)用程序開(kāi)發(fā)的框架,它利用 Spring 框架的強(qiáng)大功能,使得基礎(chǔ)架構(gòu)的搭建變得更加簡(jiǎn)單、輕量級(jí)、易于維護(hù)。在本文中,我們將詳細(xì)討
    的頭像 發(fā)表于 11-16 10:56 ?315次閱讀

    Spring Boot 的設(shè)計(jì)目標(biāo)

    什么是Spring Boot Spring BootSpring 開(kāi)源組織下的一個(gè)子項(xiàng)目,也是 S
    的頭像 發(fā)表于 10-13 14:56 ?484次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設(shè)計(jì)目標(biāo)

    Spring Boot的啟動(dòng)原理

    可能很多初學(xué)者會(huì)比較困惑,Spring Boot 是如何做到將應(yīng)用代碼和所有的依賴(lài)打包成一個(gè)獨(dú)立的 Jar 包,因?yàn)閭鹘y(tǒng)的 Java 項(xiàng)目打包成 Jar 包之后,需要通過(guò) -classpath 屬性
    的頭像 發(fā)表于 10-13 11:44 ?540次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的啟動(dòng)原理

    Spring Boot啟動(dòng) Eureka流程

    在上篇中已經(jīng)說(shuō)過(guò)了 Eureka-Server 本質(zhì)上是一個(gè) web 應(yīng)用的項(xiàng)目,今天就來(lái)看看 Spring Boot 是怎么啟動(dòng) Eureka 的。 Spring Boot 啟動(dòng) E
    的頭像 發(fā)表于 10-10 11:40 ?707次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>啟動(dòng) Eureka流程

    Spring Boot Actuator快速入門(mén)

    不知道大家在寫(xiě) Spring Boot 項(xiàng)目的過(guò)程中,使用過(guò) Spring Boot Actuator 嗎?知道 Spring
    的頭像 發(fā)表于 10-09 17:11 ?525次閱讀

    Spring Boot時(shí)配置JSON序列化選項(xiàng)的幾種方法

    Spring Boot Web 項(xiàng)目中,當(dāng)使用JSON格式接收數(shù)據(jù)和返回?cái)?shù)據(jù)的時(shí)候,Spring Boot 默認(rèn)使用一個(gè)ObjectMapper實(shí)例來(lái)序列化響應(yīng)和反序列化請(qǐng)求。 在本
    的頭像 發(fā)表于 10-09 10:26 ?1810次閱讀

    Spring Boot配置加載相關(guān)知識(shí)

    Spring BOOT 啟動(dòng)參數(shù) 在Java Web的開(kāi)發(fā)完成后,以前我們都會(huì)打包成war文件,然后放大web容器,比如tomcat、jetty這樣的容器?,F(xiàn)在基于SpringBoot開(kāi)發(fā)的項(xiàng)目
    的頭像 發(fā)表于 10-07 15:47 ?392次閱讀

    Spring Boot如何實(shí)現(xiàn)異步任務(wù)

    Spring Boot 提供了多種方式來(lái)實(shí)現(xiàn)異步任務(wù),這里介紹三種主要實(shí)現(xiàn)方式。 1、基于注解 @Async @Async 注解是 Spring 提供的一種輕量級(jí)異步方法實(shí)現(xiàn)方式,它可以標(biāo)記在方法上
    的頭像 發(fā)表于 09-30 10:32 ?1134次閱讀

    Gradle構(gòu)建的多模塊Spring Boot項(xiàng)目

    構(gòu)建的多模塊 Spring Boot 項(xiàng)目,JDK 版本為8,IDEA 版本為 2022.3.1 。 1. 創(chuàng)建項(xiàng)目 打開(kāi)IDEA,選擇菜單:File -> New -> Project,在其
    的頭像 發(fā)表于 09-25 14:46 ?2456次閱讀
    Gradle構(gòu)建的多模塊<b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>項(xiàng)目

    Spring Boot Starter需要些什么

    pulsar-spring-boot-starter是非常有必要的,在此之前,我們先看看一個(gè)starter需要些什么。 Spring Boot Starter spring-boot
    的頭像 發(fā)表于 09-25 11:35 ?632次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> Starter需要些什么

    kafka client在 spring如何實(shí)現(xiàn)

    認(rèn)識(shí)了 spring-boot-starter ,今天不妨來(lái)看下如何寫(xiě)一個(gè) pulsar-spring-boot-starter 模塊。 目標(biāo) 寫(xiě)一個(gè)完整的類(lèi)似 kafka-spring-boot-st
    的頭像 發(fā)表于 09-25 11:21 ?398次閱讀
    kafka client在 <b class='flag-5'>spring</b>如何實(shí)現(xiàn)

    Spring Boot虛擬線程和Webflux性能對(duì)比

    早上看到一篇關(guān)于Spring Boot虛擬線程和Webflux性能對(duì)比的文章,覺(jué)得還不錯(cuò)。內(nèi)容較長(zhǎng),抓重點(diǎn)給大家介紹一下這篇文章的核心內(nèi)容,方便大家快速閱讀。
    發(fā)表于 09-24 14:54 ?753次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>虛擬線程和Webflux性能對(duì)比