设置 -XX:最大框架

2022-09-03 02:06:21

根据此链接,有一个选项可以手动设置MaxRamSize,以限制JVM不使用超出此范围的内存。但我没有看到任何相同的文件。我从来都不知道。有没有类似或类似的东西?PS.我知道,我不想设置堆/堆栈/元空间/本机内存大小。我只是想知道是否有整体内存限制选项。

尝试它没有帮助,因为它出错了:

Improperly specified VM option 'MaxRAM=1073741824B'
Could not create the Java Virtual Machine.
A fatal exception has occurred. Program will exit.

事实上,根据这个链接,open-jdk似乎有这些选择。我发现的另一个链接,我相信点来设置堆大小。这又不是在寻找。但我想这是针对甲骨文的。

为什么我正在寻找这种选项来在容器(如Docker)内运行应用程序并防止应用程序被OOM Killer杀死。我相信的是,如果有这样的设置,java应用程序会出错或崩溃,而不是容器被终止。java.lang.OutOfMemoryError

我的假设和理解可能是完全错误的。这个问题也可能是完全错误和无关紧要的。但是,当然,询问是:)前进的方向。


答案 1

为什么我正在寻找这种选项来在容器(如Docker)内运行应用程序并防止应用程序被OOM Killer杀死。

这正是您正在寻找的选项。此外,它作为JDK-8170888的一部分与(~docker)正确集成。请注意,此标志不会阻止 JVM 分配比其值更多的内存,而是给出提示“我知道我的物理 RAM 限制是 X,请在 X 内分配”,因此 JVM 将在 Java 堆和本机内存之间共享此值。但是,如果您的应用程序具有本机内存泄漏或类加载器泄漏,则无论如何都会达到此限制。cgroups

JVM抱怨,因为它没有期望最终,它应该被声明为。请参阅标志的说明:。MaxRAM=1073741824BB-XX:MaxRAM=1073741824Real memory size (in bytes) used to set maximum heap size


答案 2

我认为是在抱怨“B”。根据手动输入,该命令理解大小/或/或/后缀。它没有提到“B”。javajavakKmMgG

(您是否注意到错误消息显示“未正确指定”,而不是“未知”?这暗示命令已识别该选项,但语法不正确。见上文...)java

查看Java 11的OpenJDK源代码,我可以看到“gc_globals.hpp”文件中定义的参数。MaxRAM


推荐