Java 對容器(docker)支持


 

https://segmentfault.com/a/1190000014142950

Java 8u131及以上版本開始支持了Docker的cpu和memory限制。

 

cpu limit

 

即如果沒有顯式指定-XX:ParalllelGCThreads 或者 -XX:CICompilerCount, 那么JVM使用docker的cpu限制。如果docker有指定cpu limit,jvm參數也有指定-XX:ParalllelGCThreads 或者 -XX:CICompilerCount,那么以指定的參數為准。

 

memory limit

 

在java8u131+及java9,需要加上-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap才能使得Xmx感知docker的memory limit。

 

查看參數默認值

 

java -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal

 

部分輸出

 

bool UseCGroupMemoryLimitForHeap = false {experimental} {default}

 

可以看到在java9,UseCGroupMemoryLimitForHeap參數還是實驗性的,默認關閉。

 

java10

 

bool UseCGroupMemoryLimitForHeap = false {experimental} {default}

 

java10,UseCGroupMemoryLimitForHeap還是experimental,不過標記為廢棄。

 

不過java10新引入了1個參數

 

int ActiveProcessorCount = -1 {product} {default}

 

ActiveProcessorCount可以用來指定cpu的個數

 

java11

 

java11正式移除UseCGroupMemoryLimitForHeap,代碼改動見8194086: Remove deprecated experimental flag UseCGroupMemoryLimitForHeap

 

同時引入1個新參數

 

bool UseContainerSupport = true {product} {default}

 

UseContainerSupport默認為true,可以使用-Xlog:os+container=trace參數來查看詳情。
即使使用-XX:-UseContainerSupport禁用了容器支持,-XX:ActiveProcessorCount如果有指定,該參數值仍然會被使用。

 

小結

 

參數/版本 -XX:+UseCGroupMemoryLimitForHeap -XX:ActiveProcessorCount -XX:+UseContainerSupport
java9 experimental,默認false
java10 experimental,默認false -1
java11 移除 -1 product,默認true

 

doc

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM