【问题标题】:How can I get the guest total available memory from inside a Docker container?如何从 Docker 容器中获取来宾总可用内存?
【发布时间】:2021-06-14 21:07:53
【问题描述】:

我们有一个在 Kubernetes 上运行的 Linux Docker 容器。我们希望设置适当的 Xms 和 Xmx,例如容器中总可用内存的 75%。

但是,/proc/meminfo 似乎没有命名空间(获取主机内存而不是来宾内存),并且 cgroup 内存限制超出图表,meminfo 在 macOS 上返回正确但可能会在 Linux 上返回总主机内存主持人。

memory.limit_in_bytes
9223372036854771712

您知道如何在 Kubernetes 中正确获取 Docker 容器内的可用总内存吗?

有环境变量吗?

您是否有任何经验如何在 Kubernetes 的 Docker 中直接或间接地适当设置 Xmx,以便它使用分配给该容器的总可用内存的 75%,例如 1.5G?

【问题讨论】:

  • 您需要 cgroup 限制和主机可用内存的最小值。

标签: java linux docker unix kubernetes


【解决方案1】:

通过找出 Java 10+ 中的新标志,我以不同的方式解决了我的需求:不将 Xms 或 Xmx 传递给 JVM,而是传递以下百分比:

https://merikan.com/2019/04/jvm-in-a-container/#java-10

https://blog.arkey.fr/2020/10/27/maxrampercentage-is-not-what-i-wished-for/

https://github.com/openjdk/jdk11u/blob/master/src/hotspot/share/runtime/arguments.cpp -> set_heap_size 函数

percentage_of_memory_to_use_for_heap=${HEAP_SIZE_PERCENTAGE:-75}
java -XshowSettings:vm -XX:+UseContainerSupport \
  -XX:InitialRAMPercentage=$((percentage_of_memory_to_use_for_heap)) \
  -XX:MinRAMPercentage=$((percentage_of_memory_to_use_for_heap)) \
  -XX:MaxRAMPercentage=$((percentage_of_memory_to_use_for_heap)) \

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2022-06-13
    • 2014-05-05
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    相关资源
    最近更新 更多