重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍“Docker容器资源怎么限制”,在日常操作中,相信很多人在Docker容器资源怎么限制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Docker容器资源怎么限制”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
创新互联专业提供香港机房服务器托管服务,为用户提供五星数据中心、电信、双线接入解决方案,用户可自行在线购买香港机房服务器托管服务,并享受7*24小时金牌售后服务。
--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
Docker的CPU调度分为两种,一种是CFS调度,一种是realtime调度。
CFS:CFS是linux内核默认的普通进程的调度cpu调度策略
Realtime:docker1.13之后还支持realtime调度,还需要更高版本的内核。
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
需要看内核是否支持CONFIG_RT_GROUP_SCHED,Docker守护进程启动时,是否添加--cpu-rt-runtime参数。
--cap-add=sys_nice --cpu-rt-runtime=--ulimit rtprio=
到此,关于“Docker容器资源怎么限制”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!