前言:
眼前兄弟们对“docker java oom”大体比较注意,各位老铁们都需要了解一些“docker java oom”的相关内容。那么小编同时在网络上收集了一些对于“docker java oom””的相关资讯,希望各位老铁们能喜欢,看官们一起来学习一下吧!根本原因
默认情况下,java应用程序将使用主机内存的1/4,而不是容器。这是Java运行的默认定义,容器外部没有选项。其余的内存用于交换,缓存等。
$ docker run -m 400MB openjdk:8 java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XshowSettings:vm -versionVM settings: Max. Heap Size (Estimated): 112.00M Ergonomics Machine Class: server Using VM: OpenJDK 64-Bit Server VM openjdk version "1.8.0_171"OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-1~deb9u1-b11)OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)解决
最佳配置取决于应用程序内存要求。
Java版本 < 10
从Java 8u131到Java 9,您可以使用试验性的" UseCGroupMemoryLimitForHeap"。这样就可以使用容器的1/4来针对容器的内存限制来自我管理内存值。
$ docker run -m 400MB openjdk:8 java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XshowSettings:vm -versionVM settings: Max. Heap Size (Estimated): 112.00M Ergonomics Machine Class: server Using VM: OpenJDK 64-Bit Server VM openjdk version "1.8.0_171"OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-1~deb9u1-b11)OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)
您可以通过结合使用Java中的" -Xmx"和docker上的内存限制来避免使用实验性设置。您可以使用另一个选项,"-XX:MaxRAM =",这可以使您完全修复java使用的ram的最大数量。可以将其设置为与docker内存限制相同的数量,并且将像选项" UseCGroupMemoryLimitForHeap"一样工作。不同之处在于它不是自动的。
$ docker run -m 400MB openjdk:8 java -XX:MaxRAM=400m -Xmx300m -XX:MaxRAMFraction=1 -XshowSettings:vm -versionVM settings: Max. Heap Size: 300.00M Ergonomics Machine Class: server Using VM: OpenJDK 64-Bit Server VM openjdk version "1.8.0_171"OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-1~deb9u1-b11)OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)
您可以使用-XX:MaxRAMFraction = 1优化堆内存的使用,该内存将几乎所有可用内存用作最大堆:
$ docker run -m 400MB openjdk:8 java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1 -XshowSettings:vm -versionVM settings: Max. Heap Size (Estimated): 356.00M Ergonomics Machine Class: server Using VM: OpenJDK 64-Bit Server VM openjdk version "1.8.0_171"OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-1~deb9u1-b11)OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)
Java版本10
现在,它已完全集成到Java 10中:
$ docker run --rm 400MB openjdk:10 java -XshowSettings:vm -versionVM settings: Max. Heap Size (Estimated): 121.81M Using VM: OpenJDK 64-Bit Server VM openjdk version "10.0.2" 2018-07-17OpenJDK Runtime Environment (build 10.0.2+13-Debian-1)OpenJDK 64-Bit Server VM (build 10.0.2+13-Debian-1, mixed mode)
像10之前的版本一样,您可以使用-XX:MaxRAMFraction = 1优化堆内存的使用,它将几乎所有可用的内存用作最大堆。但是此选项已被弃用,并将在未来的新版本中删除:
$ docker run -m 400MB openjdk:10 java -XshowSettings:vm -XX:MaxRAMFraction=1 -versionOpenJDK 64-Bit Server VM warning: Option MaxRAMFraction was deprecated in version 10.0 and will likely be removed in a future release. VM settings: Max. Heap Size (Estimated): 386.69M Using VM: OpenJDK 64-Bit Server VM openjdk version "10.0.2" 2018-07-17OpenJDK Runtime Environment (build 10.0.2+13-Debian-2)OpenJDK 64-Bit Server VM (build 10.0.2+13-Debian-2, mixed mode)
译文链接:
标签: #docker java oom