OpenJ9
介紹
-
OpenJ9是一種高性能,可擴展的Java™虛擬機(VM)實現,完全符合Java虛擬機規范。
-
在運行時,VM解釋由Java編譯器編譯的Java字節碼。VM充當語言與底層操作系統和硬件之間的翻譯器。Java程序需要特定的VM才能在特定的平台(例如Linux®,z /OS®或Windows™)上運行。
-
OpenJ9 VM會自動檢測它何時在docker容器中運行,並使用一種機制來檢測VM何時處於空閑狀態。當檢測到空閑狀態時,OpenJ9會運行垃圾回收周期,並將可用內存頁釋放回操作系統。還壓縮對象堆,以充分利用可用內存來進行進一步的應用程序處理。對於基於內存使用量收費的雲服務,保持較小的占用空間可以節省成本。
好處
- 內存占用少
- 啟動時間短
- 吞吐量高
- 更加適合微服務以及容器
性能
-
啟動后占比減少66%
OpenJ9針對雲工作負載進行了高度優化,在這些工作中,內存占用小非常重要。即使啟用了其他優化,占用空間仍保持不變。 -
高負載期間的占比減少了63%
當施加負載時,內存占用量迅速增加,但是在穩定狀態下,帶有OpenJ9的OpenJDK 8使用的物理內存比帶有HotSpot的OpenJDK 8少大約63%。 -
啟動時間加快42%
共享類和預編譯(AOT)技術通常會減少啟動時間。通過同時使用-Xquickstart模式,可以將啟動時間最多減少42%。 -
達到同樣的吞吐量
盡管帶有OpenJ9的OpenJDK 8和帶有Hotspot的OpenJDK 8都達到了相似的峰值吞吐量,但是帶有OpenJ9的OpenJDK 8達到了約1分鍾的峰值。 -
在容器中的滿載加速度
OpenJ9在8.5分鍾內達到單個CPU內核的峰值吞吐量,而Hotspot則為30分鍾。對於在資源受限的環境(例如容器)中運行的短期VM而言,更快地執行更多工作非常重要。
這些結果表明,OpenJ9在(通常是相互沖突的)性能指標之間達到了良好的平衡:借助AOT技術,它可以節省大量的空間並縮短啟動時間,同時還提供與Hotspot競爭的吞吐量性能。 由於其內存占用量低,OpenJ9特別適合於雲計算環境,在這種環境中,節省內存可為雲用戶和提供商節省成本。
實際使用
目前我的項目是一個基於 Spring Boot
開發的,項目中加入了大量定時器以及多線程,網絡IO請求,數據計算等。生產環境部署方式采用的Docker
,之前是采用的官方的openjdk
鏡像,目前已經改為了openj9
,至於為什么請看以下數據。
我這里以比較突出的內存占用進行比較。
服務器配置
2核4G
openjdk
對應的Dockerfile
FROM openjdk:8-jdk-alpine
ADD target/app.jar app.jar
ENTRYPOINT [ \
"java", \
"-XX:MetaspaceSize=256m", \
"-XX:MaxMetaspaceSize=256m", \
"-Xms2048m", \
"-Xmx2048m", \
"-Xmn256m", \
"-Xss256k", \
"-XX:SurvivorRatio=8", \
"-XX:+UseConcMarkSweepGC", \
"-Duser.timezone=GMT+08", \
"-Djava.security.egd=file:/dev/./urandom", \
"-jar", \
"/app.jar", \
"--spring.profiles.active=prod" \
]
運行2小時后內存占用情況:
后續運行更久時甚至達到了90%
以上。
openj9
對應的Dockerfile
FROM adoptopenjdk:8-jdk-openj9
ADD target/app.jar app.jar
ENTRYPOINT [ \
"java", \
"-XX:MetaspaceSize=256m", \
"-XX:MaxMetaspaceSize=256m", \
"-Xms2048m", \
"-Xmx2048m", \
"-Xmn256m", \
"-Xss256k", \
"-XX:SurvivorRatio=8", \
"-XX:+UseConcMarkSweepGC", \
"-Duser.timezone=GMT+08", \
"-Djava.security.egd=file:/dev/./urandom", \
"-Xshareclasses", \
"-Xquickstart", \
"-jar", \
"/app.jar", \
"--spring.profiles.active=prod" \
]
運行2小時后內存占用情況:
后續運行更久也沒有明顯變化。
最后從數據看來結果,內存占用真的低,非常節省服務器資源,相同負載下至少節省一半的服務器資源。
值得推薦大家去嘗試。