摘要:此處,不以任何方式限制這些應用程序的內(nèi)存使用。反過來,內(nèi)存由年輕代老年代組成。微服務仍然是內(nèi)存占用最大的,而最小。此測試僅針對服務執(zhí)行,而無需注冊任何微服務。
在整體應用架構中,非生產(chǎn)環(huán)境情況下,一般 1GB 或者 2GB 的 RAM 就足夠了。如果我們將這個應用程序劃分為 20 或 30 個獨立的微服務,那么很難期望 RAM 仍將保持在 1GB 或 2GB 左右。特別是如果我們使用 Spring Cloud 的時候。
首先,準備三個服務,Eureka 服務 + 提供 REST API 的兩個簡單的微服務,并將微服務注冊到 Eureka。此處,不以任何方式限制這些應用程序的內(nèi)存使用。
就像你在下圖看到的一樣,三個微服務大概占用了電腦 1.5GB 的 RAM 內(nèi)存。這三個服務是最簡單的應用程序,基本沒有數(shù)據(jù)處理量,對于這樣的內(nèi)存消耗量,顯然是不理想的。RAM 的最低使用量是用于 Eureka
發(fā)現(xiàn)服務,最大的用于初始化聲明式客戶端以調(diào)用其他服務的 API。
關于內(nèi)存使用量如下圖 JProfiler 制作的圖表。如圖所示,內(nèi)存使用受堆影響,與非堆相比,它占用了大量空間。
當然,第一個明顯的問題是我們是否需要在堆上運行我們的微服務應用程序的空間。答案是否定的,我們沒有。現(xiàn)在,我們來簡要介紹一下在
Java 8 中如何進行內(nèi)存管理過程。
我們可以將JVM內(nèi)存分為兩個不同的部分:堆(Heap)、 非堆(Non-Heap)。如上圖所示,我們的微服務器的大小為大小(?600MB)。反過來,JVM 內(nèi)存 由 年輕代(Young Generation) 、老年代(Old Generation)組成。所有新創(chuàng)建的對象都位于年輕代中。當年輕代被填滿時,執(zhí)行次要垃圾收集(Minor GC)。更準確的說,這些位于年輕代的一部分對象成為 Eden Space。Minor GC將所有仍然使用的對象從 Eden Space 移動到 Survivor 0。對于Survivor 0 和 Survivor 1 空間執(zhí)行相同的過程。在 GC 的許多循環(huán)中幸存的所有對象都被移動到老年代內(nèi)存空間。從哪里移除對象是由 Major GC 負責的。為了更好地了解下圖,在運行 java -jar 命令時,可以使用以下參數(shù)設置 Java Heap 的內(nèi)存限制:
-Xms – JVM啟動時的初始堆大小
-Xmx – 最大堆大小
-Xmn - 年輕代的大小,其余的空間是老年代
JVM內(nèi)存的第二部分,從我們的角度來看,上圖略顯不重要,它是Non-Heap。 Non-Heap 包括以下部分:
Thread Stacks :所有運行的線程的空間。可以使用 -Xss 參數(shù)設置最大線程大小。
Metaspace : 它替代了 PermGem(Java 7中是JVM堆的一部分)。在 Metaspace 中,通過應用程序加載所有類和方法。看看Spring Cloud 包含的包數(shù)量,我們不會在這里節(jié)省大量的內(nèi)存。可以通過設置 -XX:MetaspaceSize 和 -XX:MaxMetaspaceSize 參數(shù)來管理 Metaspace 大小。
Code Cache : 這是由 JIT(即時)編譯器編譯為本地代碼的本機代碼(如JNI)或 Java 方法的空間。最大大小設置 -XX:ReservedCodeCacheSize 參數(shù)。
Compressed Class Space : 使用 -XX:CompressedClassSpaceSize 設置為壓縮類空間保留的最大內(nèi)存。
Direct NIO Buffers
更簡單來說,Heap 是用于對象,Non-Heap 是用于類。可以想像,當我們的應用程序 Non-Heap 大于 Heap 時,我們可以結束這種情況。首先,讓我們用下面的參數(shù)來運行我們的服務發(fā)現(xiàn)。在我看來,如果您在 Spring Boot 上啟動具有內(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 的微服務(帶有 Feign 或 Ribbon),我們需要增加一些值:
-Xms16m -Xmx48m -XX:MaxMetaspaceSize=64m -XX:CompressedClassSpaceSize=8m -Xss256k -Xmn8m -XX:InitialCodeCacheSize=4m -XX:ReservedCodeCacheSize=8m -XX:MaxDirectMemorySize=16m
按照如上配置,JProfiler 生成了如下圖表。區(qū)別在于啟動和請求處理時間。與早期的設置相比,該應用程序的運行速度較慢。當然,我不會在生產(chǎn)環(huán)境下設置這樣的參數(shù)。
當前的總內(nèi)存使用情況如下。微服務仍然是內(nèi)存占用最大的,而Eureka 最小。
我也嘗試使用不同的 Web 容器運行 Eureka 應用程序。您可以通過在pom.xml 文件中包含以下的依賴關系輕松更改 Web 容器。
使用 Undertow
org.springframework.boot spring-boot-starter-undertow
使用 Jetty
org.springframework.boot spring-boot-starter-jetty
結果排名:Undertow(116MB)、Tomcat(122MB)、Jetty(128MB)。
此測試僅針對 Eureka 服務執(zhí)行,而無需注冊任何微服務。
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/75003.html
摘要:節(jié)前沒有新業(yè)務代碼,正好剛發(fā)布,于是開始為期四天的框架代碼升級。還好并沒有使用它的,配置上有一個小坑,的是表示而是表示,之前配置成的,如果到的里面那就要拋異常了。 節(jié)前沒有新業(yè)務代碼,正好Greenwich剛發(fā)布,于是開始為期四天的框架代碼升級。 之前的版本是 spring boot 1.5.10 , spring cloud Edgware.SR3 依賴升級 增加依賴管理插件 ap...
摘要:主要用于從額外的資源來加載配置信息,還可以在本地外部配置文件中解密屬性。由父加載,比優(yōu)先加載里面的屬性不能被覆蓋的應用場景配置文件這個容易理解,主要用于項目的自動化配置。配置文件有以下幾個應用場景。 用過 Spring Boot 的都知道在 Spring Boot 中有以下兩種配置文件 bootstrap (.yml 或者 .properties) application (.yml...
摘要:為什么要用獨立運行不需要獨立的容器就可以運行,因為在工程發(fā)布的文件里已經(jīng)包含了的文件。運行的時候,會創(chuàng)建對象,實現(xiàn)服務功能。也可以將發(fā)布成文件,放到里運行。 start date:2019-05-15 104,什么是Spring Boot? SpringBoot是一個框架,一種全新的編程規(guī)范,他的產(chǎn)生簡化了框架的使用, 所謂簡化是指簡化了Spring眾多框架中所需的大量且繁瑣的配置文件...
摘要:工作流程項目依賴監(jiān)控面板引入服務調(diào)用的組件依賴引入服務消費者的依賴數(shù)據(jù)庫鏈接依賴工具類集合類操作日志監(jiān)聽解析開源工具類庫中的配置相關依賴圖片壓縮 工作流程 showImg(https://i.loli.net/2019/07/29/5d3ee1829df4d57461.png); 項目依賴 org.springframewo...
摘要:公眾號樂園的中提供了兩個組件實現(xiàn)軟負載均衡調(diào)用,分別是和。是基于和的客戶端負載工具,它是基于實現(xiàn)的,它可以在客戶端配置服務端列表,然后輪詢請求以實現(xiàn)均衡負載。 公眾號:java樂園 spring cloud的Netflix中提供了兩個組件實現(xiàn)軟負載均衡調(diào)用,分別是Ribbon和Feign。上一篇和大家一起學習了Ribbon。Ribbon :Spring Cloud Ribbon是基于H...
閱讀 2538·2023-04-26 00:57
閱讀 911·2021-11-25 09:43
閱讀 2221·2021-11-11 16:55
閱讀 2207·2019-08-30 15:53
閱讀 3592·2019-08-30 15:52
閱讀 1459·2019-08-30 14:10
閱讀 3379·2019-08-30 13:22
閱讀 1209·2019-08-29 11:18