Docker的系统资源限制及验正

                                      作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.容器资源限制概述

1>.什么是"Limit a container's resources"

  默认情况下,容器没有资源约束,并且可以使用主机内核调度程序所允许的给定资源;

  Docker提供控制容器可以使用多少内存、CPU或块IO的方法,设置Docker run命令的运行时配置标志;

  这些特性中的许多要求内核支持linux功能:要检查支持,可以使用docker info命令

2>.资源限制(Eight-sided containers)

3>.Out Of Memory Exception(简称"OOME")

  在linux主机上,如果内核检测到没有足够的内存来执行重要的系统功能,它会抛出oome或内存不足异常,并开始终止进程以释放内存;

  一旦发生OOME,任何进程都有可能被杀死,包括docker daemon在内;

  为此,Docker特地调整了docker daemon的OOM优先级,以免它被内核"正法",但容器的优先级并未被调整。

4>.限制容器对内存的访问相关参数

  博主推荐阅读:https://docs.docker.com/config/containers/resource_constraints/。

 

二.案例演示

1>.容器内存资源限制验证

[root@node102.yinzhengjie.org.cn ~]# docker run --name stress -it -m 256m lorel/docker-stress-ng:latest stress --vm 2    #启动2个进程对容器进行压测
stress-ng: info: [] defaulting to a second run per stressor
stress-ng: info: [] dispatching hogs: vm
[root@node102.yinzhengjie.org.cn ~]# docker stats        #查看容器的状态

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
32cc396b4bc1 stress 0.04% .6MiB / 256MiB 73.65% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
32cc396b4bc1 stress 0.04% .6MiB / 256MiB 73.65% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
32cc396b4bc1 stress 95.88% .91MiB / 256MiB 38.25% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
32cc396b4bc1 stress 95.88% .91MiB / 256MiB 38.25% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
32cc396b4bc1 stress 96.82% 238MiB / 256MiB 92.98% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
32cc396b4bc1 stress 96.82% 238MiB / 256MiB 92.98% 0B / 0B 0B / 0B
^C
[root@node102.yinzhengjie.org.cn ~]#

[root@node102.yinzhengjie.org.cn ~]# docker stats        #查看容器的状态

2>.容器CPU资源限制验证

[root@node102.yinzhengjie.org.cn ~]# docker run --name stress2 -it --cpus  --rm lorel/docker-stress-ng:latest stress --cpu 8    #定义核心数为1,因此CPU不会超过100%
stress-ng: info: [] defaulting to a second run per stressor
stress-ng: info: [] dispatching hogs: cpu
[root@node102.yinzhengjie.org.cn ~]# docker stats          #查看容器的状态

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PID
S7b818dd0554d stress2 0.00% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 0.00% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 99.43% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 99.43% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 99.31% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 99.31% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 98.36% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 98.36% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 98.27% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 98.27% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 99.23% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 99.23% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 97.81% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 97.81% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 99.23% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 99.23% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 99.16% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 99.16% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 98.08% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID
S7b818dd0554d stress2 98.08% .81MiB / .701GiB 0.42% 0B / 0B 0B / 0B
^C
[root@node102.yinzhengjie.org.cn ~]#

[root@node102.yinzhengjie.org.cn ~]# docker stats          #查看容器的状态

Docker的系统资源限制及验正的更多相关文章

  1. 【程序包管理】篇章2:rpm程序包来源合法和完整性验正

    来源合法性验正: 数字签名   私钥签名完整性    哈希 注意: 1.如果是网站下载的程序包的话,没有公钥,就无法进行来源合法性验证,所以最好使用系统自带的rpm程序包或去可靠的网站下载程序包.[如 ...

  2. 利用内核cgroup机制轻松实现类似docker的系统资源管控

    近几年,以docker为代表的容器技术异常火热,它的轻量.高效让人欣喜若狂,它被赋予了改变传统IT运维的使命.相信随着时间推移,以容器云为落地形式的产品将真正实现这一使命. 我们都知道docker能够 ...

  3. Docker系列09—Docker的系统资源限制及验证

    本文收录在容器技术学习系列文章总目录 1.限制容器的资源 默认情况下,容器没有资源限制,可以使用主机内核调度程序允许的尽可能多的给定资源.Docker提供了控制容器可以使用多少内存或CPU的方法,设置 ...

  4. 【05】循序渐进学 docker:系统资源和网络

    写在前面的话 在上一篇学习 Dockerfile 的时候其实还有几个相当重要得关键中没有谈到,但没关系,在后面的内容会单独提出来一个一个的学习.这里就先谈谈关于资源的控制个容器的网络~ 资源限制 其实 ...

  5. Docker 学习10 Docker的系统资源限制及验证

    一.资源限制 二.内存限制 1.OOME 每一个进程都会有oom_adj(oom计算分数的权重)值,此值越大,oom_score(oom得分)越高,越容易被干掉,因此非常非常重要的容器化应用,一开始就 ...

  6. 8.docker的系统资源限制

    一. 概述 默认docker容器使用的memory资源和CPU资源是没有限制的,但是我们可以在docker run的时候通过选项去限制,具体参考官方文档. [root@node1 ~]# docker ...

  7. Docker 学习新手笔记:从入门到放弃

    本文记录的是作为一个新手,从了解 Docker 是什么.Docker 技术包含哪些概念到上手使用.安装以及发布 Docker 镜像的整个过程.作者在学习过程中参阅了诸多文档和教程,在此一并感谢,与此同 ...

  8. Docker 学习入门

    一.Docker 简介 1.什么是 Docker Docker 是使用最广泛的开源容器引擎,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本! 使用 Docker,可 ...

  9. Docker应用场景和局限性

    Docker有哪些好的特性?作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势.首先, Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多.其次, Docke ...

随机推荐

  1. EasyNVR网页摄像机无插件H5、谷歌Chrome直播方案使用过程中问题的自我排查-设备不在线问题自我排查检测

    由于EasyNVR的受众越来越多,时常会遇到很多类似的问题咨询,之前虽然有写过很多的博文进行技术的或者使用问题的解答,随着客户询问的增多,我发现,要想让客户了解问题和解决问题,往往引导和给一个思路比直 ...

  2. linux python 安装 pymssql

    其实也不是很完整的. 我主要在dockers中的alpine linux 下进行开发. 这里主要说的就是如何在alpine下安装pymssql 多级依赖 pymssq 依赖 Cython , Cyth ...

  3. China.NETConf2019 - 用ASP.NETCore构建可检测的高可用服务

    一.前言 2019 中国 .NET 开发者峰会(.NET Conf China 2019)于2019年11月10日完美谢幕,校宝在线作为星牌赞助给予了峰会大力支持,我和项斌等一行十位同事以讲师.志愿者 ...

  4. linux用户态和内核态理解

    1.特权级         Intel x86架构的cpu一共有0-4四个特权级,0级最高,3级最低,硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查.硬件已经提供了一套特权级使用的相关机制 ...

  5. html遮罩层实现

    html文件内容如下 <!--调出子窗口按钮--> <button class="add" onclick="addClick();"> ...

  6. SpringBoot+Vue前后端分离项目,maven package自动打包整合

    起因:看过Dubbo管控台的都知道,人家是个前后端分离的项目,可是一条打包命令能让两个项目整合在一起,我早想这样玩玩了. 1. 建立个maven父项目 next 这个作为父工程,next Finish ...

  7. GitLabCICD

    CI/CD是什么 CI全名Continuous Integration,啥意思?就是我们经常听到的持续集成概念.当开发每天会提交多次代码到主干上,会做一些重复性的动作时,就可以用持续集成环境来操作.有 ...

  8. 前端框架之Bootstrap框架

    下载地址:https://v3.bootcss.com/,下载Bootstrap3版本 下载之后把文件中不需要的文件都删掉 需要获取的样式代码,可以直接从这些地方找到,然后复制 一.HTML页面导入文 ...

  9. svn-疑难解决

    Linux下搭建SVN服务器 https://blog.51cto.com/19940919/2095011 [SVN]出现SVN--Authorization failed错误原因 https:// ...

  10. python_进程与线程的补充

    进程与线程的标识 知识点一:进程id 与 线程ident import time import multiprocessing import threading time.sleep(10) prin ...