0x0034's Blog.

K8s中java内存参数配置

字数统计: 373阅读时长: 1 min
2021/11/08

k8s中java动态内存配置

内存配置建议

条件限制: 本示例中使用Java8 , Java8的版本需要大于等于8u191,小于8u191请设置xms,xmx

  • JVM最大堆 = 容器limit内存* 1/2
  • JVM最大堆 * 125% <= 容器request

参数介绍

Java 8u191 以上版本使用-XX:MaxRAMPercentage-XX:MinRAMPercentage 两个参数. -XX:MaxRAMPercentage 是堆栈最大使用宿主内存的参数, 接受的值为浮点型. 即如果最大堆栈大小为容器limit的1/2,则设置为-XX:MaxRAMPercentage=50.0

首先查看,已经启动的JRE容器的resources. 如下所示:

1
2
3
4
5
6
7
8
9
10
11
kubectl get pods example-58667fc45-jbrjs -o yaml
...
resources:
limits:
cpu: "4"
memory: 8Gi
requests:
cpu: "4"
memory: 8Gi
...
# 此处仅展示部分

接着exec到容器中, 查看容器默认占用内存的容量.

1
2
3
4
5
6
7
8
9
10
kubectl exec -it example-58667fc45-jbrjs -- sh 
# java -XshowSettings:vm -version VM
VM settings:
Max. Heap Size (Estimated): 1.78G
Ergonomics Machine Class: server
Using VM: Java HotSpot(TM) 64-Bit Server VM

java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)

设置堆栈的最大大小为容器内存limit的1/2, 如下所示:

1
2
3
4
5
6
7
8
9
 # java -XX:MaxRAMPercentage=50.0 -XshowSettings:vm -version
VM settings:
Max. Heap Size (Estimated): 3.56G
Ergonomics Machine Class: server
Using VM: Java HotSpot(TM) 64-Bit Server VM

java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)

Max. Heap Size (Estimated): 3.56G 可以看到最大内存,已经是容器的1/2了.

-XX:MinRAMPercentage 则是最小堆栈大小, 不再赘述.

CATALOG
  1. 1. k8s中java动态内存配置
    1. 1.1. 内存配置建议
    2. 1.2. 参数介绍