1. 程式人生 > >Docker環境下Java應用的堆記憶體控制

Docker環境下Java應用的堆記憶體控制

在部署docker應用, 應用編排時都需要指定一個記憶體的最大使用上限。如果應用使用的記憶體超過了配額,映象會被kill掉。所以java微服務應用,有必要設定應用自己的最大記憶體。

引數說明設定java最大記憶體的方式

在Dockerfile裡面, 加上”-Xmx800m”類似的引數,表示Heap上限800兆。例如: CMD [“java”, “-Xmx800m”, “-jar”, “icare-open.jar”]
-Xmx是JVM的一個非標準可選引數,指定堆(Heap)的最大值。

引數設定的特別說明

docker映象的記憶體上限,不能全部給“-Xmx”。因為JVM消耗的記憶體不僅僅是Heap,如下圖:

Java執行時記憶體結構

JVM = Heap + Method Area + Constant Pool + Thread Stack * num of thread
Xmx的值設定為映象上限減去150兆,甚至200兆是一個相對安全的做法。
當然還需要考慮應用自身的特點,比如class數目,併發執行緒數等。

參考連結