gpt4 book ai didi

java - Java GC运行导致OS上的内存使用增加

转载 作者:行者123 更新时间:2023-12-02 11:48:33 25 4
gpt4 key购买 nike

最近几天,我看到了一些行为,这些行为使我的某些假设崩溃了。也许有人可以给我以下的解释

的事实

  • 我们正在GCP的K8s中的Docker容器中运行Java应用程序
  • 我们的基本图像是openjdk:8u171-jre-slim-stretch
  • 我们使用了标志-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap =>,因此应该从容器而不是从主机获取资源限制=>工作于
  • 的IMO
  • 我们使用了XX:MaxRAMFraction=2,因此我们获得了堆的大约一半的容器内存限制=>可以工作
  • 的IMO
  • JVM的
  • 没有 没有 -Xmx设置
  • 影响JVM内存的唯一方法是通过Kubernetes资源限制=>这正是我们想要的

  • 我没有得到的东西

    当GC启动时(Scavenge或G1), container memory usage增加,但 jvm memory usage没有增加。为什么GC会消耗容器中的内存?好的,它将内容从 old gen复制到 young gen,所以我知道短时间内会使用更多的内存。但是我期望这将从JVM进程而不是某些内核进程中获取。

    最佳答案

    在我们的一个运行Java Pod的K8s集群中设置内存和CPU限制时,我们遇到了一个问题,在Prometheus中显示Pod的内存使用量要高得多(甚至有一些Pod由于探测错误而崩溃)。
    在进一步分析时,我们发现GC正在努力释放内存,因为与对象创建相比,限制太小了。使CPU周期花费在GC上;而不是实际工作。我们通过增加Pod内存限制来避免这种情况。
    因此,也许您可​​以增加提供给Pod的最大内存限制,然后看看这是否消失了。我不确定这是否对您有帮助,但想分享一下,以防万一。

    关于java - Java GC运行导致OS上的内存使用增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51651711/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com