UseContainerSupport VM参数有什么作用?

时间:2019-02-04 13:16:59

标签: java docker

此选项在docker文件中有什么作用?

    int main()
    {
        LFUCache<int>cache(3); // cache of size 3
        cache.set(1, 1);
        cache.set(2, 2);
        cache.set(3, 3);
        cache.set(2, 4); 

        rc = cache.get(1, r);

        assert(rc);
        assert(r == 1);
        // evict old element, in this case 3
        cache.set(4, 5);
        rc = cache.get(3, r);
        assert(!rc);
        rc = cache.get(4, r);
        assert(rc);
        assert(r == 5);

        LFUCache<int, string>cache2(2);
        cache2.set(1, "one");
        cache2.set(2, "two");
        string val;
        rc = cache2.get(1, val);
       if (rc)
          assert(val == "one");
       else
          assert(false);

       cache2.set(3, "three"); // evict 2
       rc = cache2.get(2, val);
       assert(rc == false);
       rc = cache2.get(3, val);
       assert(rc);
       assert(val == "three");

}

没有此参数的docker容器会启动吗? 我检查了one article并显示

  

启用内存支持

但是我仍然不清楚。

2 个答案:

答案 0 :(得分:6)

从Java 10开始,此参数(默认情况下启用)用于使JVM在分配堆大小而不是主机配置时考虑容器内存限制。 / p>

这个选项是Java 8的背包: https://www.oracle.com/technetwork/java/javase/8u191-relnotes-5032181.html

示例:

如果您运行:

docker run **-m 1gb** openjdk:8u131 java -XshowSettings:vm -version

结果将是(在我的机器上为8gb的Ubuntu)

Max. Heap Size (Estimated): 1.68G

我为容器设置了内存限制,但它忽略并使用了主机配置(默认情况下,它使用总内存/ 4)

现在,如果我运行具有新功能的版本(上面的链接),则可以看到已考虑容器内存限制:

docker run **-m 1g** openjdk:8u191-jre-alpine java -XshowSettings:vm -version

结果(总内存/ 4):

VM settings:
    Max. Heap Size (Estimated): 247.50M
    Ergonomics Machine Class: server
    Using VM: OpenJDK 64-Bit Server VM

openjdk version "1.8.0_191"

当时我正在编写openjdk:8图像的最新版本是222,因此您可以使用此版本,该版本具有背包功能。

有关更多信息:

说明此标志在Java 10中的用法:https://medium.com/adorsys/jvm-memory-settings-in-a-container-environment-64b0840e1d9e

在Java 8中使用此标志:https://blog.softwaremill.com/docker-support-in-new-java-8-finally-fd595df0ca54

答案 1 :(得分:3)

是的,容器将在没有-XX:+UseContainerSupport的情况下启动。

XX:+ UseContainerSupport用于分配更大的内存。

要防止VM在容器中运行时调整最大堆大小,请设置-XX:-UseContainerSupport。

除此之外,https://www.eclipse.org/openj9/docs/xxusecontainersupport/可能会有所帮助。