本文翻譯自:https://medium.com/@satanjim/how-we-reduced-the-memory-consumption-of-spring-boot-application-over-40-for-the-development-c8a5813fac23
在開發(fā)基礎(chǔ)的 Spring Boot 應(yīng)用程序時,我們需要考慮可承受的內(nèi)存消耗。隨著添加更多依賴項(xiàng),內(nèi)存消耗也會增加。對于整體應(yīng)用程序,通常仍然可以承受內(nèi)存消耗,但當(dāng)我們開發(fā)多個微服務(wù)并在本地計(jì)算機(jī)上運(yùn)行時,這可能成為一場噩夢,影響開發(fā)效率。
Spring Boot 和 JVM 都帶有一些默認(rèn)配置,適用于大多數(shù)情況,甚至在某些生產(chǎn)環(huán)境中也能勝任。但是如果我們能調(diào)整一些配置來適應(yīng)本地開發(fā),就可以顯著減少內(nèi)存消耗。請注意,我不是 JVM 和 Spring Boot 方面的專家,只是想在這篇文章中分享一些我自己的經(jīng)驗(yàn)。
首先,讓我們了解一下,到底是誰在消耗內(nèi)存呢?沒錯,是 JVM。但是它是如何做到的呢?
要深入了解這個問題,我們需要了解 JVM 的內(nèi)部結(jié)構(gòu),但這超出了本文的范圍。簡單來說,JVM 的內(nèi)存消耗可以分成堆(Heap)、元空間(Metaspace)、每個線程的堆棧(Thread Stack)以及其他。
內(nèi)存消耗
為了減少內(nèi)存消耗,我們需要向 JVM 顯式地傳遞一些參數(shù)。
首先,我們需要進(jìn)行一些前置準(zhǔn)備:
接下來,我們可以配置一些參數(shù)。創(chuàng)建一個名為"dev.jvm.conf"的文件,并輸入以下值(稍后我們會解釋這些值的含義):
# dev.jvm.conf# 覆蓋應(yīng)用程序的屬性SERVER_TOMCAT_ACCEPT_COUNT=3SERVER_TOMCAT_MAX_CONNECTIONS=3SERVER_TOMCAT_THREADS_MAX=3SERVER_TOMCAT_THREADS_MIN_SPARE=1SPRING_MAIN_LAZY_INITIALIZATION=true# 設(shè)置JVM參數(shù)JAVA_TOOL_OPTIONS=-XX:+UseSerialGC -Xss512k -XX:MaxRAM=200m
然后,我們使用 docker-compose 將這些環(huán)境變量傳遞到容器中:
# docker-compose.ymlservices: service1: image: service1:dev env_file: - dev.jvm.conf service2: image: service2:dev env_file: - dev.jvm.conf
現(xiàn)在運(yùn)行docker-compose up命令,您應(yīng)該能看到一些差異。
在開始之前,請記住,降低某些值不會直接減少本地環(huán)境中的內(nèi)存使用量,因?yàn)楸镜丨h(huán)境中通常不會有那么多請求。我們添加閾值的目的是,即使在本地環(huán)境中,如果我們開始收到更多請求,也要限制其數(shù)量。這最終將有助于限制內(nèi)存使用。
這是一些簡單的調(diào)整,但它們可以在本地開發(fā)環(huán)境中顯著減少內(nèi)存消耗。當(dāng)然,根據(jù)您的具體情況,您可能需要進(jìn)一步進(jìn)行調(diào)整。這只是一個起點(diǎn),您可以根據(jù)實(shí)際需求進(jìn)行優(yōu)化。
總而言之,通過適當(dāng)配置 JVM 和 Spring Boot,并理解內(nèi)存消耗的原理,我們可以降低本地開發(fā)環(huán)境的內(nèi)存消耗,提高工作效率。希望這些提示能對您有所幫助!
本文鏈接:http://www.www897cc.com/showinfo-26-60921-0.html如何將開發(fā)環(huán)境的 Spring Boot 應(yīng)用程序內(nèi)存降低 40% 以上
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 如何使用FluentResults優(yōu)雅地處理結(jié)果和錯誤
下一篇: 程序員進(jìn)階架構(gòu)師必看的面試重災(zāi)區(qū):JVM整體架構(gòu)、內(nèi)存模型與調(diào)優(yōu)實(shí)戰(zhàn)