当前位置: 首页 > 知识库问答 >
问题:

如何从Docker容器中获取来宾总可用内存?

宋嘉禧
2023-03-14

我们在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?

共有1个答案

焦学海
2023-03-14

通过在Java10中找出新标志,我以不同的方式解决了我的需求:通过不将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-

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)) \
 类似资料:
  • 由于Docker从引擎版本20.10开始支持cgroup v2,因此它将自动在启用了cgroups v2的发行版上使用它。从容器中获取唯一容器ID的已知解决方案不再有效。 尝试与docker v20.10.8在Debian 11与阿尔卑斯山:最新。 cgroup v1的工作解决方案:如何从容器本身中获取DockerLinux容器信息? 正如docker参考中所述,对于cgroup v2,容器id在

  • 问题内容: 如标题所示。我需要能够检索Docker主机的IP地址和从主机到容器的端口映射,并在容器内部进行操作。 问题答案: 正如@MichaelNeale注意到的那样,没有必要使用此方法(除非仅在构建时需要此IP),因为此IP将在构建时进行硬编码。

  • 问题内容: 我想了解它们的配置,就像通过元数据获取有关EC2实例的信息一样。 我可以使用(假设正在侦听port ) 来获取它的一些数据,但是想知道是否有更好的方法,至少获取容器的完整ID,因为实际上缩短到了12个字符,而docker似乎对其执行了“最佳匹配”。 另外,如何获取docker主机的外部IP(除了访问EC2元数据(特定于AWS)之外) 问题答案: 我发现可以在/ proc / self

  • 问题内容: 我面临以下问题:我创建了一个Jenkins Docker容器,并将主机上的Docker套接字与该容器链接。像这样: 然后,当我尝试在詹金斯上创建一些作业时,我收到通常的“权限被拒绝”消息: 尝试在unix:///var/run/docker.sock上连接到Docker守护程序套接字时获得的权限被拒绝:获取 http://%2Fvar%2Frun%2Fdocker.sock/v1.29

  • 我想让我的知道它们的配置,就像您可以通过元数据获得EC2实例的信息一样。 我可以使用(提供正在监听端口) 获取它的一些数据,但想知道是否有更好的方法,至少是获取容器的完整ID,因为实际上缩短为12个字符,docker似乎对其执行“最佳匹配”。 另外,如何获取docker主机的外部IP(除了访问特定于AWS的EC2元数据之外)

  • 正如标题所说。我需要能够检索docker主机的IP地址,以及从主机到容器的端口映射,并在容器内部完成此操作。