聊聊新版JDK對docker容器的支持

本文主要聊聊新版JDK對docker容器的支持java

java8及java9

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

cpu limit

即若是沒有顯式指定-XX:ParalllelGCThreads 或者 -XX:CICompilerCount, 那麼JVM使用docker的cpu限制。若是docker有指定cpu limit,jvm參數也有指定-XX:ParalllelGCThreads 或者 -XX:CICompilerCount,那麼以指定的參數爲準。api

memory limit

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

查看參數默認值jvm

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

部分輸出.net

bool UseCGroupMemoryLimitForHeap              = false                               {experimental} {default}
能夠看到在java9,UseCGroupMemoryLimitForHeap參數仍是實驗性的,默認關閉。

java10

bool UseCGroupMemoryLimitForHeap              = false                               {experimental} {default}
java10,UseCGroupMemoryLimitForHeap仍是experimental,不過標記爲廢棄。

不過java10新引入了1個參數code

int ActiveProcessorCount                     = -1                                       {product} {default}
ActiveProcessorCount能夠用來指定cpu的個數

java11

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

同時引入1個新參數blog

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

相關文章
相關標籤/搜索