Docker资源限制

在默认的情况下,docker没有对容器进行硬件资源的限制,当容器负载过高时会尽肯能第占用宿主机资源。在这基础上,docker提供了针对容器的内存,CPU,IO资源的控制方式。(真正可以控制的只有内存和cpu)Docker内存控制OOME在linxu系统上,如果内核探测到当前宿主机已经没有可用内存使用,那么会抛出一个OOME(Out Of Memory Exception:内存异常 ),并且会开启killing去杀掉一些进程。一旦发生OOME,任何进程都有可能被杀死,包括docker daemon在内,为此,docker特地调整了docker daemon的OOM_Odj优先级,以免他被杀掉,但容器的优先级并未被调整。经过系统内部复制的计算后,每个系统进程都会有一个OOM_Score得分,OOM_Odj越高,得分越高,(在docker run的时候可以调整OOM_Odj)得分最高的优先被kill掉,当然,也可以指定一些特定的重要的容器禁止被OMM杀掉,在启动容器时使用 –oom-kill-disable=true指定。内存限制的部分参数-m : 指定容器内存

--memory-swap : 设置容器交换分区大小,设置交换分区必须要设置 -m:依赖前者,容器内与交换分区的关系比较特别,如下:--memory-swap--memory功能正数S正数M容器可用总空间为S,其中ram为M,swap为(S-M),若S=M,则无可用swap资源

O正数M相当于未设置swap (unset)

unset正数M若主机(Docker Host)启用了swap,则容器的可用swap为2*M

-l正数M若主机(Docker Host)启用了swap,则容器的可使用最大值主机上的所有swap空间的swap资源

注意:在容器内使用free命令可以看到的swap空间并不具有其所展现出的空间指示意义--oom-kill-disable=true : 禁止容器被oom杀掉,使用该参数要与-m一起使用

CPU的限制

默认情况下,每一个容器可以使用宿主机上的所有cpu资源,但大多数系统使用的资源调度算法是CFS(完全公平调度器),它公平调度每一个工作进程。进程分cpu密集型和io密集型两类。系统内核会实时监测系统进程,当某个进程占用cpu资源时间过长时,内核会调整该进程的优先级。

CPU资源分配策略

共享cpu资源--cpu-share: cpu资源提供给一组容器使用,组内的容器按比例使用cpu资源,当容器处于空闲状态时,cpu资源被负载大的容器占用,(按压缩方式比例分配),当空闲进行运行起来时,cpu资源会被分配到其他容器

--cpus= value : 指定 cpu的核心数量,这种方式直接限定了容器可用的cpu资源

--cpuset-cpus: 指定容器只能运行在哪个cpu核心上(绑定cpu);核心使用0,1,2,3编号;–cpu-share会随机指定cpu

启动一个容器并限制资源

启动一个centos容器,限制其内存为1G ,可用cpu数为2[root@localhost ~]# docker run --name os1 -it -m 1g --cpus=2 centos:latest bash

启动容器后,可以使用docker 的监控指令查看容器的运行状态docker top 容器名: 查看容器的进程,不加容器名即查看所有

docker stats 容器名:查看容器的CPU,内存,IO 等使用信息[root@localhost ~]# docker stats os1

CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS

f9420cbbd2a9 os1 45.94% 47.09MiB / 1GiB 4.60% 54.6MB / 352kB 0B / 21.1MB 3

在容器中安装docker容器压测工具 stress#先安装一些基础工具

[root@f9420cbbd2a9 /]# yum install wget gcc gcc-c++ make -y

#下载stress

[root@f9420cbbd2a9 ~]# wget http://people.seas.harvard.edu/~apw/stress/stress-1.0.4.tar.gz

#安装

[root@f9420cbbd2a9 ~]# tar zxf stress-1.0.4.tar.gz

[root@f9420cbbd2a9 ~]# cd stress-1.0.4

[root@f9420cbbd2a9 stress-1.0.4]./configure

[root@f9420cbbd2a9 stress-1.0.4]# make

[root@f9420cbbd2a9 stress-1.0.4]# make install

在容器使用stress指令进行负载压测[root@f9420cbbd2a9 ~]# stress -m 1204m --vm 2

#模拟出4个繁忙的进程消耗cpu,然后使用-m 模拟进程最大使用的内存数1024,使用--vm 指定进程数

#更多参数使用 stress --help查看

使用docker指令查看容器运行状态,可以os1容器的内存和cpu都得到了限制,即使给压测时超出了最大内存,也不会额外占用资源[root@localhost ~]# docker stats os1

CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS

f9420cbbd2a9 os1 127.46% 319.7MiB / 1GiB 31.22% 54.8MB / 356kB 0B / 33.6MB 9

mysql docker oom_如何让docker容器不会被oomkill掉设置oomkilldisable相关推荐

  1. docker tomcat mysql_Docker下Tomcat容器中使用Mysql的方法

    在这里我们使用Tomcat容器来运行war包,不过作为一个网站一个程序,如果需要用到数据库的,那么Tomcat容器中如何连接Mysql呢? 已经pull了tomcat和mysql镜像,可以使用dock ...

  2. docker配置容器mysql启动参数_修改Docker容器启动配置参数

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

  3. 【MySQL】记录 Navicat连接 docker mysql 容器,备份docker mysql 注意事项

    文章目录 Navicat连接 docker mysql 容器 定时任务备份 docker mysql ,解决 备份数据库为空 问题 Navicat连接 docker mysql 容器 确保 登录 用户 ...

  4. Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  5. docker容器mysql头文件_在Docker容器中使用MySQL数据库

    开发过程中经常需要安装.调试mysql数据库,还需要在各种操作系上安装包依赖,实在是繁琐,因此就研究了一下如何在docker上运行一个mysql镜像,省却了我安装.找依赖的问题. 注:本文所有内容均在 ...

  6. docker mysql开机自启动_Docker 学会让容器开机自启服务

    广深小龙亲测重启服务器后 docker 容器没跑起来,相信有不少小伙伴在用 docker 部署容器的时候也发现每次开机服务就没有自启了,需要手动去执行把容器服务开启起来,但有没有可以让它开机自启呢?显 ...

  7. linux修改容器内的mysql端口映射_修改docker容器端口映射的方法

    大家都知道docker run可以指定端口映射,但是容器一旦生成,就没有一个命令可以直接修改.通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射. 有没有办法不保存镜像而直接修改 ...

  8. linux开启docker mysql_Linux服务器利用Docker快速搭建MySQL数据库

    首先你要有一台Linux服务器 利用Xshell远程软件连接后就可以开始安装docker容器了. 1.第一步在Linux服务器上安装docker 2.第二步利用Docker拉取mysql镜像 Cent ...

  9. gogs mysql 报错_linux上Docker安装gogs私服亲测(详解)

    一.前言 有网友问我为什么要使用私服,可能大部分人都不是太懂,网上那么多存储仓库而且好用方便,但是你想过没有如果企业中的项目,放在人家的仓库上这个安全性不是太好,所以说一般企业都会有自己的私服.本章教 ...

最新文章

  1. Java 中序列化与反序列化
  2. 自定义键盘keyfere——pcsensor
  3. 2019ICPC(沈阳) (回文自动机+Palindrome Series优化dp)
  4. c语言 define 关键字,c语言中define的一个不常见的用法
  5. eclipse定义和修改模板
  6. android ssl http,Android SSL HTTP请求使用自签名证书和CA
  7. Python相关网站(持续更新)
  8. jsp错误处理页面_JSP异常处理– JSP错误页面
  9. APP开发者常用的4种推广渠道
  10. 登录GITHUB:Open your two-factor authenticator (TOTP) app or browser extension to view your authenticat
  11. Cadence OrCAD Capture 查找功能详细介绍
  12. 常见计算机名词符号读音
  13. Flash游戏抓取,flash网站抓取,网页游戏提取工具
  14. ubuntu18 配置静态IP地址(详细版)
  15. 一个有趣的网站:子说
  16. 数据库DDL数据定义语言
  17. 深入理解 Python yield
  18. Ubuntu 18.04 版本中安装mysql 8的方法
  19. C - Justice
  20. 日常工作生活中的做人做事道理[持续更新ing]

热门文章

  1. 在PC上安装handset版meego的qemu虚拟机
  2. 基于51单片机的汇编程序:六位8段数码管(共阴极)动态显示“123456”
  3. android 使用ios字体大小,字体大小在iOS和Android上有所不同
  4. 误删的文件还有办法恢复吗
  5. linux命令查看cpu序列号,Linux下用命令查看CPU ID以及厂家等信息
  6. 前端遮罩层实现_jQuery 实现的遮罩层效果
  7. 哪里有免费的考研计算机课程,计算机考研课程视频哪个好
  8. Intellij IDEA2017.3免注册码激活步骤-亲测可用
  9. uni-app支付宝微信支付
  10. 网络流二十四题之二十二 —— 火星探险问题