文档章节

Docker资源限制

China_OS
 China_OS
发布于 2018/12/25 14:31
字数 709
阅读 38
收藏 0

Memory

--memory可以单独使用,但是--memory-swap是必须要与--memory一起使用的。

正常情况下,--memory-swap的值包含容器可用内存和可用swap。所以--memory="300m" --memory-swap="1g" 的含义为:容器可以使用300M的物理内存,并且可以使用700M(1G -300M)的swap。--memory-swap 是容器可以使用的物理内存和可以使用的swap之和!

把--memory-swap设置为0和不设置是一样的,此时如果设置了--memory,容器可以使用的swap大小为--memory值的两倍。

如果--memory-swap的值和--memory相同,则容器不能使用swap。

如果--memory-swap没有设置,--memory设置了,则容器可以使用两倍--memory容量的swap。--memory="300m" --memory-swap没有设置,相当于可以使用300m内存+600m的swap  

如果--memory-swap设置为-1,相当于不限制swap的容量,但是会受限于host主机的swap容量  

在容器内部,free看到的swap是host的swap,并不是容器可用的swap容量  

--oom-kill-disable  当OOM发生的时候,内核会kills掉容器内的进程,为了改变这种行为,可以在设置--memory的时候,同时设置--oom-kill-disable。如果没有设置--memory,则host可能会OOM,这时候内核会kill host的系统进程来释放memory

    Java内存分配,由于java程序可以在程序启动的时候设置自己的jvm堆栈大小,所以怎么处理容器的内存限制和jvm本身的内存限制是一个问题。java最近几年更新也很快,有版本帝的气质了,不同的jdk版本对容器的支持程度还不一样。

java8u131-
在容器内部通过设置-Xmx参数来指定堆栈大小


java8u131+  java9
-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap


java10
-XX:-UseContainerSupport

CPU

    Docker的CPU调度分为两种,一种是CFS调度,一种是realtime调度。

        CFS:CFS是linux内核默认的普通进程的调度cpu调度策略

        Realtime:docker1.13之后还支持realtime调度,还需要更高版本的内核。

    CFS

docker-1.13+  --cpus个数,可以是小数,表示容器可以使用的cpu个数 
docker-1.13-  --cpu-period和--cpu-quota单位是毫秒,组合起来表示容器可以使用的cpu个数,cpus是这两个命令的整合
--cpuset-cpus 绑定cpu,可以让容器在固定的host cpu上运行
--cpu-shares  设置每个容器占cpu的权重,默认值是1024,设置为0表示使用默认值1024

    Realtime

        需要看内核是否支持CONFIG_RT_GROUP_SCHED,Docker守护进程启动时,是否添加--cpu-rt-runtime参数。    

--cap-add=sys_nice
--cpu-rt-runtime=<value>
--ulimit rtprio=<value>

 

© 著作权归作者所有

共有 人打赏支持
上一篇: P1
下一篇: Traefik 实战2
China_OS
粉丝 421
博文 460
码字总数 513906
作品 0
静安
技术主管
私信 提问
详解Docker架构、镜像、容器及资源限制

Docker概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,...

若此生无缘
2018/08/10
0
0
如何在容器运行过程中对容器的资源限制进行调整

背景 docker run和docker create有一些参数可以对容器使用的主机资源进行限制。这些主机资源主要有如下类型 cpu调度 内存使用量 io权重 但是一旦创建了容器,容器在运行中或者不在运行中,如...

marshalzxy
2018/11/22
0
0
Docker与容器安全

Docker与容器安全 Docker能否大规模用于生产环境,尤其是公有云环境,就在于Docker是否能提供安全的环境。本文将总结《Docker容器与容器云》一书3.9节『Docker与容器安全』的主要内容,包括D...

yeit
2015/11/11
4
1
Docker资源限制与Cgroups

Docker资源限制与Cgroups 一、Linux control groups 简介   Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输...

优惠券活动
03/11
0
0
docker高级应用之cpu与内存资源限制

之前介绍过如何使用ovs的qos技术对docker容器做网络资源限制,本次介绍如何使用docker本身的参数进行cpu与内存资源限制。 默认docker本身提供在创建容器的时候,进行内存、swap、cpu限制,但...

dl528888
2015/06/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

万能的Python,还能用来制作高大上的进度条?

对于开发或者运维来说,使用Python去完成一些跑批任务,或者做一些监控事件是非常正常的情况。那么如何有效的监控任务的进度,除了在任务中加上log外,还能不能有另一种方式来了解任务进展到...

上海小胖
26分钟前
2
0
如何嵌入 HTML 到 iPython notebook的输出

如何嵌入 HTML 到 iPython notebook的输出 iPython notebook中可以嵌入 HTML,也适用于JupyterHub和JupyterLab环境。不仅可以显示常用的HTML标签文本,甚至可以嵌入脚本交互操作和Frame分隔框...

openthings
52分钟前
1
0
四、RabbitMQ3.7在CentOS7下的安装

安装依赖 sudo yum install -y gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel git 创建yum源 vi /etc/yum.repos.d/rabbitmq-erlang.repo [......

XuePeng77
今天
2
0
android 延长Toast的时长

示例:myToast(5000,"hello"); public void myToast(int showTime, String msg) { Toast hello = Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT); new CountDownTimer(......

雨焰
昨天
4
0
浅谈mybatis的日志适配模式

Java开发中经常用到的日志框架有很多,Log4j、Log4j2、slf4j等等,Mybatis定义了一套统一的日志接口供上层使用,并为上述常用的日志框架提供了相应的适配器。有关适配器模式例子可以参考 设计...

算法之名
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部