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
而不是容器被终止.
我的假设和理解可能完全错误.这个问题也可能是完全错误和无关紧要的.但当然,要求是前进的方向:).
为什么我要寻找这种在容器内运行应用程序的选项(如 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
。
我找到了参考资料
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 严重崩溃。
归档时间: |
|
查看次数: |
5700 次 |
最近记录: |