use*_*024 5 java containers docker java-heap
我 100% 了解 JVM 的陷阱以及在 JVM 世界中为了解容器的人体工程学/资源而取得的进步/进步。另外,是的,我知道 Java 在默认情况下会尝试分配它运行的环境中可用 RAM 的 1/4...
所以我有一些想法和问题。我制定了 50/50 规则。如果我的应用程序需要 1GB 的 Xmx,那么我创建了 2GB 的容器,它为 JVM 开销和任何容器/交换的东西提供了另外 1GB 的 RAM(虽然不确定交换在容器中是如何真正工作的)。
所以我在想,如果我的应用程序需要 6GB 的 Xmx,我真的需要创建 12GB 的容器还是可以使用 7GB 或 8GB 的容器?当涉及到 RAM 时,我们需要在容器内部留出多少空间?
如果您的容器专用于 JVM,则不需要使用百分比。
您需要知道您需要多少 Java 堆(在本例中为 6GB)以及其他所有内容需要多少(您已经证明它小于 2GB)。
然后将它们相加即可。在这种情况下,8GB 容器应该没问题。请注意,堆栈和堆内存是分开的,因此如果您需要同时运行大量线程,请不要忘记为每个线程添加 1MB 的堆栈空间(或使用 -Xss 设置的任何内容)
另外,我强烈建议将最小和最大 Java 堆大小设置为相同的值 - 在本例中为 6GB。这样,当 Java 尝试增加堆时,您就可以保证不会出现任何意外。