设置-XX:MaxRam

Vip*_*non 10 java memory performance jvm jvm-hotspot

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

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

Improperly specified VM option 'MaxRAM=1073741824B'
Could not create the Java Virtual Machine.
A fatal exception has occurred. Program will exit.
Run Code Online (Sandbox Code Playgroud)

事实上根据这个链接 open-jdk似乎有这些选项.我发现的另一个链接指向设置堆大小.这也是不寻找的.但我认为这是针对Oracle的.

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

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

qww*_*sad 8

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

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

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


Pet*_*rey 3

我找到了参考资料

https://chriswhocodes.com/hotspot_options_jdk11.html?s=MaxRam

但正如 Stephen C 所说,这可能只是B

注意:这是用于计算默认堆和直接内存最大值的最大 RAM 大小。它没有提供更大的执行力。

用于设置最大堆大小的实际内存大小(以字节为单位)

对于另一个参数

符合人体工程学的最大堆大小(以字节为单位);[默认值] 0 表示使用 MaxRAM * MaxRAMPercentage / 100


在 Oracle/OpenJDK 中没有明显的选项。

$ java -XX:+PrintFlagsFinal -version | grep -i MaxRAM
Run Code Online (Sandbox Code Playgroud)

然而,在 Linux 上,您可以设置最大内存大小,ulimit但如果达到,这将使 JVM 严重崩溃。