0

我正在使用 Dockerfile 在 docker 容器中运行 hypergraphql:

FROM adoptopenjdk/openjdk8
RUN curl https://www.hypergraphql.org/resources/hypergraphql-1.0.3-exe.jar --output hypergraphql-1.0.3-exe.jar
EXPOSE 8080
CMD ["java", "-jar", "hypergraphql-1.0.3-exe.jar", "--config", "/config/config.json"] 

我认为我应该调整容器内的 JVM 大小,以防止 JVM 占用所有可用内存https://developers.redhat.com/blog/2017/03/14/java-inside-docker/

但我对默认的 JVM 堆大小一无所知。我怎样才能找到它,它的最佳价值是多少?

4

1 回答 1

0

“最大堆大小”的默认值通常是可用 RAM 的 25%。它曾经将主机内存考虑在内,但后来也针对容器进行了修复(该修复也被反向移植到 Java 8u191:https ://merikan.com/2019/04/jvm-in-a-container/#backported-to -java-8 )

通常调整默认“最大堆大小”最简单的选项是-XX:MaxRAMPercentage=60.0- 这里是一个将默认 25% 更改为 60% 的示例。

正如 apangin 所说,没有“最佳堆大小” - 您需要对其进行试验,看看什么适合您的应用程序。您可以尝试将“最大堆大小”大幅缩小到您的应用程序几乎无法使用的程度,然后将其乘以 3-5 倍:

从 big heap 开始,往下收缩直到坏掉;然后翻三倍然后回家

对于不耐烦的人,答案是从大约 5 x [Live Data 消耗的内存量] 的内存开始,然后从那里开始微调。

于 2021-04-09T06:17:56.150 回答