減少Spring Boot的JVM記憶體佔用的Docker三種配置
該文提出了減少Spring Boot減少JVM佔用的三種Dockerfile映象配置:
- OpenJ9:取代Hotspot的IBM Eclipse專案。它已經被開發很長一段時間,看起來已經足夠成熟,可以用於生產。您可以立即輕鬆地獲益,替換一些基本映象和一些引數可能足以為您的應用程式提供巨大的推動力 - 我已經通過更改 Dockerfile基本映像替換了一些應用程式,節約了大約 1/3的記憶體佔用,增強了吞吐量。
FROM adoptopenjdk/openjdk8-openj9:alpine-slim COPY target/app.jar /my-app/app.jar ENTRYPOINT java $JAVA_OPTS -Xshareclasses -Xquickstart -jar /my-app/app.jar
- GraalVM:圍繞這個由Oracle實驗室開發的有前途的虛擬機器進行了大量宣傳。它為您提供了將應用程式編譯為本機映象的選項,生成映象非常非常快且記憶體消耗很少,吸引人眼球的另一個功能是能夠與多種語言(如Javascript,Ruby,Python和Java)進行互動操作。
FROM oracle/graalvm-ce:1.0.0-rc15 COPY target/app.jar /my-app/app.jar ENTRYPOINT java $JAVA_OPTS -jar /my-app/app.jar
- Fabric8 shell:一個bash指令碼,可根據應用程式當前執行環境自動為您配置JVM引數。它可以在這裡下載,是這個研究專案的產物。它降低了不少記憶體:
FROM java:openjdk-8-alpine COPY target/app.jar /my-app/app.jar COPY run-java.sh /my-app/run-java.sh ENTRYPOINT JAVA_OPTIONS=${JAVA_OPTS} JAVA_APP_JAR=/my-app/app.jar /my-app/run-java.sh
雖然我們在應用解決方案時總是需要考慮上下文,但對我來說,獲勝者是OpenJ9,從而以最少的配置實現了生產就緒的效能和記憶體佔用。
雖然仍然沒有找到使用不合適的情況,但這並不意味著它將成為一個銀彈解決方案,請記住,最好是測試替代品,看看哪種更適合您的需求。
為什麼不用GraalVM?
GraalVM是一個偉大的專案,在接下來的幾個月裡也許它能顛覆讓本文的結論,但到目前為止,我發現了一些不能讓我想在生產中使用它的東西,特別是Spring Boot。
- 不是GA - 目前正在釋出candidate 15版本
- 對於沒有函式bean定義的Spring Boot,本機映象仍然無法正常執行
- 正確構建本機映象需要做更多的工作
- 原生映象速度非常快,但您必須考慮丟失一些JVM功能
相關文章
- 字串池化,減少1/3記憶體佔用字串記憶體
- python使用迭代生成器yield減少記憶體佔用的方法Python記憶體
- 谷歌Chrome瀏覽器引入省記憶體/省電模式:減少記憶體佔用谷歌Chrome瀏覽器記憶體模式
- 選擇合適Redis資料結構,減少80%的記憶體佔用Redis資料結構記憶體
- 揭秘!Vue3.5響應式重構如何讓記憶體佔用減少56%Vue記憶體
- 字串池化,減少了三分之一的記憶體佔用字串記憶體
- curl 中減少記憶體分配操作記憶體
- Spring Boot 和 Spring Cloud 應用記憶體如何管理?Spring BootCloud記憶體
- mysql佔用記憶體高的一種解決方法MySql記憶體
- jvm的記憶體引數配置(skycto JEEditor)JVM記憶體
- python物件的記憶體佔用Python物件記憶體
- Spring Boot + MYSQL + Docker的配置 - DEVSpring BootMySqlDockerdev
- Spring Boot 讀取配置內容的三種方式Spring Boot
- JVM記憶體引數配置JVM記憶體
- 精進 Spring Boot 03:Spring Boot 的配置檔案和配置管理,以及用三種方式讀取配置檔案Spring Boot
- python定時爬蟲啟用時如何減少記憶體?Python爬蟲記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- Spring Boot應用,使用native編譯與不使用的啟動時間和記憶體佔用對比Spring Boot編譯記憶體
- HBase記憶體配置及JVM優化記憶體JVM優化
- Spring Boot RCE到記憶體馬探索Spring Boot記憶體
- JVM的記憶體區域JVM記憶體
- influxdb記憶體佔用剖析UX記憶體
- 資源記憶體佔用記憶體
- 微軟的HotSpot C2可減少15%堆記憶體分配微軟HotSpot記憶體
- Win10記憶體佔用過多怎麼辦 win10清理記憶體佔用的方法Win10記憶體
- NIO的JVM記憶體和機器記憶體的選擇JVM記憶體
- Linux/Centos檢視程式佔用記憶體大小的幾種方法總結LinuxCentOS記憶體
- [轉帖]JVM記憶體配置最佳實踐JVM記憶體
- 雲原生背景下如何配置 JVM 記憶體JVM記憶體
- Spring Boot heapdump洩露記憶體分析方法Spring Boot記憶體
- 配置Tree Shaking來減少JavaScript的打包體積JavaScript
- Java中的CPU佔用高和記憶體佔用高的問題排查Java記憶體
- JVM記憶體GC的騙局JVM記憶體GC
- JVM -- 物件的記憶體佈局JVM物件記憶體
- mariadb 記憶體佔用優化記憶體優化
- node計算記憶體佔用記憶體
- 託管堆記憶體佔用記憶體
- 如何將開發環境的 Spring Boot 應用程式記憶體降低 40% 以上開發環境Spring Boot記憶體