这篇文章主要介绍“Docker容器资源怎么限制”,在日常操作中,相信很多人在Docker容器资源怎么限制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Docker容器资源怎么限制”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
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:+UseCGroupMemoryLimitForHeapjava10-XX:-UseContainerSupportCPU
Docker的CPU调度分为两种,一种是CFS调度,一种是realtime调度。
CFS:CFS是linux内核默认的普通进程的调度cpu调度策略
Realtime:docker1.13之后还支持realtime调度,还需要更高版本的内核。CFSdocker-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=