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之前的版本感知到的是物理机上的资源。

  4核CPU16G内存

  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, 默认开启

jvm感知docker容器参数的更多相关文章

  1. 修改docker容器参数

    创建容器时没有添加参数  --restart=always ,导致的后果是:当 Docker 重启时,容器未能自动启动. docker container update --restart=alway ...

  2. 7.Docker容器使用辅助工具汇总

    原文地址: 点击直达 more information: https://docs.docker.com/engine/security/security/#docker-daemon-attack- ...

  3. Docker——JVM 感知容器的 CPU 和 Memory 资源限制

    前言 对于那些在Java应用程序中使用Docker的CPU和内存限制的人来说,可能会遇到一些挑战.特别是CPU限制,因为JVM在内部透明地设置GC线程和JIT编译器线程的数量. 这些可以通过命令行选项 ...

  4. Zabbix-(五)监控Docker容器与自定义jvm监控项

    Zabbix-(五)监控Docker容器与自定义jvm监控项 一.前言 前文中讲述了Zabbix对服务器硬件方面的监控功能,本文将讲述利用Zabbix监控Docker容器中的Java Web服务,并通 ...

  5. Docker容器里的进程为什么要前台运行?相同的问题:docker运行apache为什么带FOREGROUND参数?docker运行nginx为什么带`daemon off`参数?

    <第一本Docker书>里面,讲到Docker容器启动web服务时,都指定了前台运行的参数. 例如apache: ENTRYPOINT [ "/usr/sbin/apache2& ...

  6. Docker(十七)-修改Docker容器启动配置参数

    有时候,我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动, 现在要添加该参数怎么办呢,方法有二: 1.Docker 命令修改 docker c ...

  7. docker容器的参数如何指定配额

    docker容器的参数如何指定配额 1. 内存 现在让我看下内存限制. 第一件事需要注意的是,默认一个容器可以使用主机上的所有内存. 如果你想为容器中的所有进程限制内存,使用docker run命令的 ...

  8. 修改Docker容器启动配置参数

    有时候,我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动, 现在要添加该参数怎么办呢,方法有二: 1.Docker 命令修改 docker c ...

  9. 【原创】大叔经验分享(71)docker容器中使用jvm工具

    java应用中经常需要用到jvm工具来进行一些操作,如果java应用部署在docker容器中,如何使用jvm工具? 首先要看使用的docker镜像, 比如常用的openjdk镜像分为jdk和jre,只 ...

随机推荐

  1. Go Example--range

    package main import "fmt" func main() { nums := []int{2,3,4} sum :=0 //rang 遍历切片 for _,num ...

  2. 【mysql】创建索引

    一.联合唯一索引 项目中需要用到联合唯一索引: 例如:有以下需求:每个人每一天只有可能产生一条记录:处了程序约定之外,数据库本身也可以设定: 例如:t_aa 表中有aa,bb两个字段,如果不希望有2条 ...

  3. idea的svn安装

    https://blog.csdn.net/qq_27093465/article/details/74898489

  4. Linux下使用Quagga(Zebra)搭建路由器记录(转)

    写在前面 从22号中午开始琢磨zebra/quagga的用法,一直到晚上11点多都没有什么头绪.各种Google,百度,几近崩溃.由于网上关于zebra/quagga的配置方法都是在真实的若干台电脑上 ...

  5. Tornado 模板(StaticFileHandler/static_path/template_path等) 笔记

    使用StaticFileHandler进行首页默认访问页面,最好将StaticFileHandler放在最后面,这样不会覆盖要匹配自定义的路径 import tornado.web import to ...

  6. Linux shell脚本读取用户输入的参数

    新建一个test.sh文件 #!/bin/sh echo "1 : For Test" echo "2 : For nohup &" whiletrue ...

  7. win10 + VS2015 + 64位OSG3.4.0

    一.下载 1.osg源码 2.整理好的第三方库 3.cmake3.7.1绿色版 4.osg3.4.0数据包 二.编译前的准备工作 在D:\下新建一个OSG文件夹,在其下再新建4个文件夹 D:\OSG\ ...

  8. 关于div

    <article id="a"> <div class="a1"></div> <div class="a2 ...

  9. mysql_test

    ------------------ #/bin/sh binlogfile=$1 if [ ! -n $binlogfile ]thenecho "pls input your mysql ...

  10. mysql日常处理

    http://blog.csdn.net/zengxuewen2045/article/details/52349731 https://github.com/enmotplinux/On-Site- ...