日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Spring Boot & Spring Cloud 應(yīng)用內(nèi)存管理

Memory Management

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、丘北網(wǎng)站維護(hù)、網(wǎng)站推廣。

在整體應(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è)簡單的微服務(wù),并將微服務(wù)注冊(cè)到 Eureka。此處,不以任何方式限制這些應(yīng)用程序的內(nèi)存使用。

提示:Spring Cloud 簡單應(yīng)用的搭建示例:https://www.ictgu.cn/share/6644e468

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

未限制的內(nèi)存用量

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

Heap

Non-Heap

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

我們可以將JVM內(nèi)存分為兩個(gè)不同的部分:堆(Heap)、 非堆(Non-Heap)。如上圖所示,我們的微服務(wù)器的大小為大小(?600MB)。反過來,JVM 內(nèi)存 由 年輕代(Young Generation) 、老年代(Old Generation)組成。所有新創(chuàng)建的對(duì)象都位于年輕代中。當(dāng)年輕代被填滿時(shí),執(zhí)行次要垃圾收集(Minor GC)。

更準(zhǔn)確的說,這些位于年輕代的一部分對(duì)象成為 Eden Space。Minor GC將所有仍然使用的對(duì)象從 Eden Space 移動(dòng)到 Survivor 0。對(duì)于Survivor 0 和 Survivor 1 空間執(zhí)行相同的過程。在 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)存

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

  • Thread Stacks :所有運(yùn)行的線程的空間??梢允褂?-Xss 參數(shù)設(shè)置***線程大小。
  • Metaspace : 它替代了 PermGem(Java 7中是JVM堆的一部分)。在 Metaspace 中,通過應(yīng)用程序加載所有類和方法。看看Spring Cloud 包含的包數(shù)量,我們不會(huì)在這里節(jié)省大量的內(nèi)存。可以通過設(shè)置 -XX:MetaspaceSize 和 -XX:MaxMetaspaceSize 參數(shù)來管理 Metaspace 大小。
  • Code Cache : 這是由 JIT(即時(shí))編譯器編譯為本地代碼的本機(jī)代碼(如JNI)或 Java 方法的空間。***大小設(shè)置-XX:ReservedCodeCacheSize 參數(shù)。
  • Compressed Class Space : 使用 -XX:CompressedClassSpaceSize 設(shè)置為壓縮類空間保留的***內(nèi)存。
  • Direct NIO Buffers

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

 
 
 
 
  1. -Xms16m \ 
  2. -Xmx32m \ 
  3. -XX:MaxMetaspaceSize=48m \ 
  4. -XX:CompressedClassSpaceSize=8m \ 
  5. -Xss256k \ 
  6. -Xmn8m \ 
  7. -XX:InitialCodeCacheSize=4m \ 
  8. -XX:ReservedCodeCacheSize=8m \ 
  9. -XX:MaxDirectMemorySize=16m 

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

 
 
 
 
  1. -Xms16m \ 
  2. -Xmx48m \ 
  3. -XX:MaxMetaspaceSize=64m \ 
  4. -XX:CompressedClassSpaceSize=8m \ 
  5. -Xss256k \ 
  6. -Xmn8m \ 
  7. -XX:InitialCodeCacheSize=4m \ 
  8. -XX:ReservedCodeCacheSize=8m \ 
  9. -XX:MaxDirectMemorySize=16m 

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

Heap

Non-Heap

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

低配置的內(nèi)存用量

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

使用 Undertow

 
 
 
 
  1.  
  2.     org.springframework.boot 
  3.     spring-boot-starter-undertow 
  4.  

使用 Jetty

 
 
 
 
  1.  
  2.     org.springframework.boot 
  3.     spring-boot-starter-jetty 
  4.  

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

 【本文為專欄作者“翟永超”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過聯(lián)系作者獲取授權(quán)】

戳這里,看該作者更多好文


網(wǎng)頁題目:Spring Boot & Spring Cloud 應(yīng)用內(nèi)存管理
網(wǎng)站鏈接:http://www.dlmjj.cn/article/dpeoijg.html