• jvm感知docker容器参数


      docker中的jvm检测到的是宿主机的内存信息,它无法感知容器的资源上限,这样可能会导致意外的情况。

      -m参数用于限制容器使用内存的大小,超过大小时会被OOMKilled。

      -Xmx:  默认为物理内存的1/4。

      4核CPU16G内存的宿主机

      java 7

    docker run -m 1G -it openjdk:7u181
    java -XX:+PrintFlagsFinal -version | grep MaxHeapSize # 结果是 16G / 4 = 4G

      java 8

    docker run -m 1G -it adoptopenjdk/openjdk8:latest
    java -XX:+PrintFlagsFinal -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -version | grep MaxHeapSize # 结果是 1G / 4 = 256M

      java 9

    docker run -m 1G -it adoptopenjdk/openjdk9:latest
    java -XX:+PrintFlagsFinal -version | grep MaxHeapSize # 结果是 16G / 4 = 4G
    java -XX:+PrintFlagsFinal -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -version | grep MaxHeapSize # 结果是 1G / 4 = 256M

      java 10

    docker run -m 1G -it adoptopenjdk/openjdk10:latest # 给1G
    jshell -v # 启动jshell
    java -XX:+PrintFlagsFinal -version | grep MaxHeapSize  # 结果是 1G / 4 = 256M

      java5/6/7/8u131-:务必设置内存选项Xmx。

      java 8u131+和java 9+ -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap。

      java 8u191+ UseContainerSupport默认开启,backported;java 9暂未backport这个feature。

      java10+的UseContainerSupport默认开启。

      Xmx的值可设置为镜像上限减去150m或200m,根据具体业务考虑。因为栈内存等是不包含在堆内存中的。

      cat /sys/fs/cgroup/memory/memory.limit_in_bytes查看容器设置的最大内存。

      docker update -m 1024m test动态修改内存大小后,最好重启容器。

      cpu和内存一样,java10之前的版本感知到的是物理机上的资源。

      4CPU16G内存

      java 6/7/8/9

    docker run --cpus 1 -m 1G -it adoptopenjdk/openjdk9:latest # 给1核
    
    jshell -J-Xmx512M -v # 启动jshell
    
    Runtime.getRuntime().availableProcessors() # 结果是不是1!!!

      java 10

    docker run --cpus 1 -m 1G -it adoptopenjdk/openjdk10:latest # 给1核
    
    jshell -J-Xmx512M -v # 启动jshell
    
    Runtime.getRuntime().availableProcessors() # 结果是1

      java 10之前:手动设置jvm相关的选项,如:

    • ParallelGCThreads
    • ConcGCThreads
    • G1ConcRefinementThreads
    • CICompilerCount / CICompilerCountPerCPU

      java 10+:

    • UseContainerSupport, 默认开启
  • 相关阅读:
    02_java基础学习_基础语法(上)01_day02总结
    EditPlus如何设置保存时不产生.bak备份文件?
    UltraEdit(UE)如何设置去掉.bak备份文件?
    如何在win10上连接苹果无线键盘
    01_java基础学习_Java概述_day01总结
    Python 提取Twitter tweets中的元素(包括text, screen names, hashtags)
    #leetcode#Path Sum II
    怎样实现广度优先遍历(BFS)
    GCD编程-串行队列与并发队列
    在对方电脑建立IPC连接, 利用IPC$入侵 运行木马
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/9863609.html
Copyright © 2020-2023  润新知