如何在 Open JDK 11 上限制非堆大小
How do you limit non-heap size on Open JDK 11
我们是 运行 openjdk:11-slim based docker AWS 中的容器。我们通常使用两种实例类型。一个有 1G,另一个有 2G 可用内存。在 1G 实例上,我已经开始使用这些参数来限制堆大小:
-XX:MaxRAM=1g -XX:MaxRAMPercentage=30
我也想限制非堆。它是一个 Spring 引导应用程序,在 Spring 引导管理中,它目前看起来像这样(运行 默认值):
如您所见,1.33 GB Max 甚至无法工作,因为总内存只有 1G。理想情况下,非堆也应限制在 30% 以内。我可以使用哪些 JVM 参数来调整非堆内存的大小?
我进行了一些调查,在这个实例中,1G 总 RAM 的大约 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
不能限制堆外内存,否则应用程序会崩溃。分配直接内存时,总是需要它,所以拒绝它与OutOfMemoryError
.
相同
您可以使用 -XX:MaxMetaspaceSize=
限制元空间大小。
您可以减少 JIT 编译器用于存储已编译方法的内存量,因此可能会减少编译,-XX:ReservedCodeCacheSize=
。
我们是 运行 openjdk:11-slim based docker AWS 中的容器。我们通常使用两种实例类型。一个有 1G,另一个有 2G 可用内存。在 1G 实例上,我已经开始使用这些参数来限制堆大小:
-XX:MaxRAM=1g -XX:MaxRAMPercentage=30
我也想限制非堆。它是一个 Spring 引导应用程序,在 Spring 引导管理中,它目前看起来像这样(运行 默认值):
如您所见,1.33 GB Max 甚至无法工作,因为总内存只有 1G。理想情况下,非堆也应限制在 30% 以内。我可以使用哪些 JVM 参数来调整非堆内存的大小?
我进行了一些调查,在这个实例中,1G 总 RAM 的大约 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
不能限制堆外内存,否则应用程序会崩溃。分配直接内存时,总是需要它,所以拒绝它与OutOfMemoryError
.
您可以使用 -XX:MaxMetaspaceSize=
限制元空间大小。
您可以减少 JIT 编译器用于存储已编译方法的内存量,因此可能会减少编译,-XX:ReservedCodeCacheSize=
。