java - Java Xmx 和 Docker 容器 RAM 大小之间还有多少余量?

标签 java docker containers 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 尝试增加堆时不会有任何意外。

关于java - Java Xmx 和 Docker 容器 RAM 大小之间还有多少余量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60354048/

相关文章:

java - 无法在我的 Android 模拟器中创建文件夹

java - Spring MVC 下拉列表

java - 从列表java获取包含子列表的索引

docker - 如何从Docker保存Zeppelin Notebook?

kubernetes - Kubernetes 和 Service Fabric 之间的区别

java - 有没有办法在应用程序服务器外部执行 EJB?

java - 模式方法匹配返回 false

ssh - 基于不存在的镜像的 Docker 容器?

docker - 从docker compose中的网络别名中删除服务名称

docker - Kaniko 和 BuildKit/Buildx 有什么区别?