如何在openjdk11上限制非堆大小

wrrgggsh  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(472)

我们正在跑步openjdk:11-slim based aws中的docker容器。我们通常使用两种示例类型。一个有1g,另一个有2g的可用内存。在1g示例上,我已经开始使用以下参数约束堆大小: -XX:MaxRAM=1g -XX:MaxRAMPercentage=30 我也想约束非堆。它是一个spring boot应用程序,在spring boot admin中,它当前看起来是这样的(运行默认值):

如您所见,1.33gbmax甚至无法工作,因为只有1g的总内存。理想情况下,非堆也应该限制在30%以内。我可以使用哪些jvm参数来调整非堆内存的大小?
我已经做了一点调查,在这个例子中,1g内存总量的30%已经用于与应用程序无关的进程(第三列是总内存的百分比)。

3663 root      4.6 /usr/bin/python2.7 /usr/bin/aws logs push --config-file /etc/awslogs/awslogs.conf --additional-configs-dir /etc/awslogs/config
 3430 root      4.1 /usr/bin/dockerd --storage-driver devicemapper --storage-opt dm.thinpooldev=/dev/mapper/docker-docker--pool --storage-opt dm.use_deferred_removal=true --storage-opt dm.use_deferred_deletion=true --storage-opt dm.fs=ext4 --storage-opt dm.basesize=100G
 2949 healthd   3.5 puma 2.11.1 (tcp://127.0.0.1:22221) [healthd]
 3021 root      2.6 /usr/bin/python2.7 /opt/aws/bin/cfn-hup
 3437 root      2.2 containerd --config /var/run/docker/containerd/containerd.toml --log-level info
 4867 root      2.1 docker logs -f f82ef403ef45
 4831 root      2.0 docker wait f82ef403ef45
 3501 root      1.9 docker events
 3322 root      1.7 /sbin/dmeventd
16976 root      0.7 sshd: ec2-user [priv]
 2280 root      0.6 /usr/bin/amazon-ssm-agent
yzckvree

yzckvree1#

不能限制堆外内存,否则应用程序将崩溃。当分配直接内存时,总是需要它,因此拒绝它与 OutOfMemoryError .
可以使用 -XX:MaxMetaspaceSize= .
您可以减少jit编译器用来存储已编译方法的内存量,因此可以使用 -XX:ReservedCodeCacheSize= .

相关问题