成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring Boot & Spring Cloud 應(yīng)用內(nèi)存管理

boredream / 1891人閱讀

摘要:此處,不以任何方式限制這些應(yīng)用程序的內(nèi)存使用。反過(guò)來(lái),內(nèi)存由年輕代老年代組成。微服務(wù)仍然是內(nèi)存占用最大的,而最小。此測(cè)試僅針對(duì)服務(wù)執(zhí)行,而無(wú)需注冊(cè)任何微服務(wù)。

在整體應(yīng)用架構(gòu)中,非生產(chǎn)環(huán)境情況下,一般 1GB 或者 2GB 的 RAM 就足夠了。如果我們將這個(gè)應(yīng)用程序劃分為 20 或 30 個(gè)獨(dú)立的微服務(wù),那么很難期望 RAM 仍將保持在 1GB 或 2GB 左右。特別是如果我們使用 Spring Cloud 的時(shí)候。

首先,準(zhǔn)備三個(gè)服務(wù),Eureka 服務(wù) + 提供 REST API 的兩個(gè)簡(jiǎn)單的微服務(wù),并將微服務(wù)注冊(cè)到 Eureka。此處,不以任何方式限制這些應(yīng)用程序的內(nèi)存使用。

就像你在下圖看到的一樣,三個(gè)微服務(wù)大概占用了電腦 1.5GB 的 RAM 內(nèi)存。這三個(gè)服務(wù)是最簡(jiǎn)單的應(yīng)用程序,基本沒(méi)有數(shù)據(jù)處理量,對(duì)于這樣的內(nèi)存消耗量,顯然是不理想的。RAM 的最低使用量是用于 Eureka
發(fā)現(xiàn)服務(wù),最大的用于初始化聲明式客戶端以調(diào)用其他服務(wù)的 API。

關(guān)于內(nèi)存使用量如下圖 JProfiler 制作的圖表。如圖所示,內(nèi)存使用受堆影響,與非堆相比,它占用了大量空間。

當(dāng)然,第一個(gè)明顯的問(wèn)題是我們是否需要在堆上運(yùn)行我們的微服務(wù)應(yīng)用程序的空間。答案是否定的,我們沒(méi)有。現(xiàn)在,我們來(lái)簡(jiǎn)要介紹一下在
Java 8 中如何進(jìn)行內(nèi)存管理過(guò)程。

我們可以將JVM內(nèi)存分為兩個(gè)不同的部分:堆(Heap)、 非堆(Non-Heap)。如上圖所示,我們的微服務(wù)器的大小為大?。?600MB)。反過(guò)來(lái),JVM 內(nèi)存 由 年輕代(Young Generation)老年代(Old Generation)組成。所有新創(chuàng)建的對(duì)象都位于年輕代中。當(dāng)年輕代被填滿時(shí),執(zhí)行次要垃圾收集(Minor GC)。更準(zhǔn)確的說(shuō),這些位于年輕代的一部分對(duì)象成為 Eden Space。Minor GC將所有仍然使用的對(duì)象從 Eden Space 移動(dòng)到 Survivor 0。對(duì)于Survivor 0 和 Survivor 1 空間執(zhí)行相同的過(guò)程。在 GC 的許多循環(huán)中幸存的所有對(duì)象都被移動(dòng)到老年代內(nèi)存空間。從哪里移除對(duì)象是由 Major GC 負(fù)責(zé)的。為了更好地了解下圖,在運(yùn)行 java -jar 命令時(shí),可以使用以下參數(shù)設(shè)置 Java Heap 的內(nèi)存限制:

-Xms – JVM啟動(dòng)時(shí)的初始堆大小

-Xmx – 最大堆大小

-Xmn - 年輕代的大小,其余的空間是老年代

JVM內(nèi)存的第二部分,從我們的角度來(lái)看,上圖略顯不重要,它是Non-Heap。 Non-Heap 包括以下部分:

Thread Stacks :所有運(yùn)行的線程的空間??梢允褂?-Xss 參數(shù)設(shè)置最大線程大小。

Metaspace : 它替代了 PermGem(Java 7中是JVM堆的一部分)。在 Metaspace 中,通過(guò)應(yīng)用程序加載所有類和方法??纯碨pring Cloud 包含的包數(shù)量,我們不會(huì)在這里節(jié)省大量的內(nèi)存。可以通過(guò)設(shè)置 -XX:MetaspaceSize-XX:MaxMetaspaceSize 參數(shù)來(lái)管理 Metaspace 大小。

Code Cache : 這是由 JIT(即時(shí))編譯器編譯為本地代碼的本機(jī)代碼(如JNI)或 Java 方法的空間。最大大小設(shè)置 -XX:ReservedCodeCacheSize 參數(shù)。

Compressed Class Space : 使用 -XX:CompressedClassSpaceSize 設(shè)置為壓縮類空間保留的最大內(nèi)存。

Direct NIO Buffers

更簡(jiǎn)單來(lái)說(shuō),Heap 是用于對(duì)象,Non-Heap 是用于類??梢韵胂?,當(dāng)我們的應(yīng)用程序 Non-Heap 大于 Heap 時(shí),我們可以結(jié)束這種情況。首先,讓我們用下面的參數(shù)來(lái)運(yùn)行我們的服務(wù)發(fā)現(xiàn)。在我看來(lái),如果您在 Spring Boot 上啟動(dòng)具有內(nèi)嵌 Tomcat 的 Eureka,這些配置是最低的值。

-Xms16m 
-Xmx32m 
-XX:MaxMetaspaceSize=48m 
-XX:CompressedClassSpaceSize=8m 
-Xss256k 
-Xmn8m 
-XX:InitialCodeCacheSize=4m 
-XX:ReservedCodeCacheSize=8m 
-XX:MaxDirectMemorySize=16m

如果使用REST API 的微服務(wù)(帶有 Feign 或 Ribbon),我們需要增加一些值:

-Xms16m 
-Xmx48m 
-XX:MaxMetaspaceSize=64m 
-XX:CompressedClassSpaceSize=8m 
-Xss256k 
-Xmn8m 
-XX:InitialCodeCacheSize=4m 
-XX:ReservedCodeCacheSize=8m 
-XX:MaxDirectMemorySize=16m

按照如上配置,JProfiler 生成了如下圖表。區(qū)別在于啟動(dòng)和請(qǐng)求處理時(shí)間。與早期的設(shè)置相比,該應(yīng)用程序的運(yùn)行速度較慢。當(dāng)然,我不會(huì)在生產(chǎn)環(huán)境下設(shè)置這樣的參數(shù)。

當(dāng)前的總內(nèi)存使用情況如下。微服務(wù)仍然是內(nèi)存占用最大的,而Eureka 最小。

我也嘗試使用不同的 Web 容器運(yùn)行 Eureka 應(yīng)用程序。您可以通過(guò)在pom.xml 文件中包含以下的依賴關(guān)系輕松更改 Web 容器。

使用 Undertow


    org.springframework.boot
    spring-boot-starter-undertow

使用 Jetty


    org.springframework.boot
    spring-boot-starter-jetty

結(jié)果排名:Undertow(116MB)、Tomcat(122MB)、Jetty(128MB)。
此測(cè)試僅針對(duì) Eureka 服務(wù)執(zhí)行,而無(wú)需注冊(cè)任何微服務(wù)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75003.html

相關(guān)文章

  • Spring Boot 2.1.2 & Spring Cloud Greenwich 升級(jí)

    摘要:節(jié)前沒(méi)有新業(yè)務(wù)代碼,正好剛發(fā)布,于是開(kāi)始為期四天的框架代碼升級(jí)。還好并沒(méi)有使用它的,配置上有一個(gè)小坑,的是表示而是表示,之前配置成的,如果到的里面那就要拋異常了。 節(jié)前沒(méi)有新業(yè)務(wù)代碼,正好Greenwich剛發(fā)布,于是開(kāi)始為期四天的框架代碼升級(jí)。 之前的版本是 spring boot 1.5.10 , spring cloud Edgware.SR3 依賴升級(jí) 增加依賴管理插件 ap...

    newsning 評(píng)論0 收藏0
  • Spring Boot 核心配置文件 bootstrap & application 詳解。

    摘要:主要用于從額外的資源來(lái)加載配置信息,還可以在本地外部配置文件中解密屬性。由父加載,比優(yōu)先加載里面的屬性不能被覆蓋的應(yīng)用場(chǎng)景配置文件這個(gè)容易理解,主要用于項(xiàng)目的自動(dòng)化配置。配置文件有以下幾個(gè)應(yīng)用場(chǎng)景。 用過(guò) Spring Boot 的都知道在 Spring Boot 中有以下兩種配置文件 bootstrap (.yml 或者 .properties) application (.yml...

    CKJOKER 評(píng)論0 收藏0
  • 11_Spring Boot & Spring Cloud

    摘要:為什么要用獨(dú)立運(yùn)行不需要獨(dú)立的容器就可以運(yùn)行,因?yàn)樵诠こ贪l(fā)布的文件里已經(jīng)包含了的文件。運(yùn)行的時(shí)候,會(huì)創(chuàng)建對(duì)象,實(shí)現(xiàn)服務(wù)功能。也可以將發(fā)布成文件,放到里運(yùn)行。 start date:2019-05-15 104,什么是Spring Boot? SpringBoot是一個(gè)框架,一種全新的編程規(guī)范,他的產(chǎn)生簡(jiǎn)化了框架的使用, 所謂簡(jiǎn)化是指簡(jiǎn)化了Spring眾多框架中所需的大量且繁瑣的配置文件...

    TalkingData 評(píng)論0 收藏0
  • [Spring cloud 一步步實(shí)現(xiàn)廣告系統(tǒng)] 8. 檢索系統(tǒng)配置&依賴

    摘要:工作流程項(xiàng)目依賴監(jiān)控面板引入服務(wù)調(diào)用的組件依賴引入服務(wù)消費(fèi)者的依賴數(shù)據(jù)庫(kù)鏈接依賴工具類集合類操作日志監(jiān)聽(tīng)解析開(kāi)源工具類庫(kù)中的配置相關(guān)依賴圖片壓縮 工作流程 showImg(https://i.loli.net/2019/07/29/5d3ee1829df4d57461.png); 項(xiàng)目依賴 org.springframewo...

    dailybird 評(píng)論0 收藏0
  • 8、服務(wù)發(fā)現(xiàn)&服務(wù)消費(fèi)者Feign

    摘要:公眾號(hào)樂(lè)園的中提供了兩個(gè)組件實(shí)現(xiàn)軟負(fù)載均衡調(diào)用,分別是和。是基于和的客戶端負(fù)載工具,它是基于實(shí)現(xiàn)的,它可以在客戶端配置服務(wù)端列表,然后輪詢請(qǐng)求以實(shí)現(xiàn)均衡負(fù)載。 公眾號(hào):java樂(lè)園 spring cloud的Netflix中提供了兩個(gè)組件實(shí)現(xiàn)軟負(fù)載均衡調(diào)用,分別是Ribbon和Feign。上一篇和大家一起學(xué)習(xí)了Ribbon。Ribbon :Spring Cloud Ribbon是基于H...

    lpjustdoit 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

boredream

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<