默认docker容器可以使用宿主机所有的内存和CPU,我们可以通过 docker run 来限制内存和CPU的使用。

有的系统内核不支持 Linux capabilities. 可以通过 docker info 命令来检查,如果系统内核不支持,会有如下报错

WARNING: No swap limit support

在linux主机上,如果kernel发现没有足够的内存了,会报出OOME或者Out Of Memory Exception,并且会kill 进程来释放内存,任何的进程都有可能会被kill,包括docker,这可能引起整个系统的宕机。

docker尝试通过调整docker守护进程的OOM优先级来减轻风险,以便它比系统上的其他进程更不可能被杀死。

选项 描述
-m or --memory= 容器可使用最大内存,最小内存为4m,单位可以为 b,k,m,g
--memory-swap* 容器可用于交换到硬盘的最大内存
--memory-swappiness 默认情况下,容器的内核可以交换出一定比例的匿名页,设置为从 0 到 100,0表示关闭
--memory-reservation 内存预留
--kernel-memory 核心内存限制。最小为 4M
--oom-kill-disable 是否阻止 OOM killer 杀死容器,默认没设置

--memory-swap 介绍

只有当--memory设置之后,--memory-swap 才会生效

1、如果--memory-swap设置为正整数,那么这两个--memory和 --memory-swap必须设置。--memory-swap表示可以使用的内存和交换总量,并--memory控制非交换内存使用的数量。因此,如果--memory="300m"--memory-swap="1g",容器可以使用300m的内存和700m(1g - 300m)交换。

2、如果--memory-swap设置为0,则忽略该设置,并将该值视为未设置。

3、如果--memory-swap设置为与值相同的值--memory,并且--memory设置为正整数,则不使用swap。

4、如果--memory-swap未设置并且--memory--memory设置,则如果主机容器配置了交换内存,则容器可以使用两倍于设置的交换。例如,如果--memory="300m"--memory-swap未设置,容器可以使用300m的内存和600m的交换。

5、如果--memory-swap明确设置为-1,则允许容器使用无限制交换,最多可达主机系统上可用的数量。

防止容器使用交换

如果--memory--memory-swap设置为相同的值,则可以防止容器使用任何交换。这是因为--memory-swap可以使用的组合内存和交换量,而--memory只是可以使用的物理内存量。

--memory-swappiness 细节

  • 值为0将关闭匿名页面交换。
  • 值100将所有匿名页面设置为可交换。
  • 默认情况下,如果未设置--memory-swappiness,则值将从主机继承。

--kernel-memory 细节

内核内存限制以分配给容器的总内存表示。请考虑以下方案:

  • 无限内存,无限内核内存:这是默认行为。
  • 无限内存,有限内核内存:当所有cgroup所需的内存量大于主机上实际存在的内存量时,这是合适的。您可以将内核内存配置为永远不会覆盖主机上可用的内容,而需要更多内存的容器需要等待它。
  • 有限的内存,无限的内核内存:整体内存有限,但内核内存不受限制。
  • 有限的内存,有限的内核内存:限制用户和内核内存对于调试与内存相关的问题非常有用。如果容器正在使用意外数量的任一类型的内存,则它会耗尽内存而不会影响其他容器或主机。在此设置中,如果内核内存限制低于用户内存限制,则内核内存不足会导致容器遇到OOM错误。如果内核内存限制高于用户内存限制,则内核限制不会导致容器遇到OOM。

当您打开任何内核内存限制时,主机会根据每个进程跟踪“高水位线”统计信息,因此您可以跟踪哪些进程(在本例中为容器)正在使用多余的内存。通过/proc/<PID>/status在主机上查看,可以在每个过程中看到这一点。

docker内存限制的更多相关文章

  1. docker内存监控与压测

    一直运行的docker容器显示内存已经耗尽,并且容器内存耗尽也没出现重启情况,通过后台查看发现进程没有占用多少内存.内存的监控使用的是cadvisor,计算方式也是使用cadvisor的页面计算方式, ...

  2. docker内存和cpu调试

    本地启动了一个sshd的容器服务,但该容器经常会被重启导致ssh连接失败,使用kubectl describe pod命令查看改命令发现有容器返回值为137,一般是系统环境原因,且一般为内存不足导致的 ...

  3. Docker 容器内存限制 - 八

    Docker 内存限制: centos /bin/bash  查看容器实例 内存限制: 限制容器内存大小:docker run -d -i -t -m 256M --memory-swap 512M ...

  4. docker高级应用之cpu与内存资源限制(转)

    时间:2015-06-09 14:01:52      阅读:1581      评论:0      收藏:0      [点我收藏+] 标签:docker资源限制   docker cpu限制    ...

  5. [转帖]Docker容器CPU、memory资源限制

    Docker容器CPU.memory资源限制 https://www.cnblogs.com/zhuochong/p/9728383.html 处理事项内容等 这一块内容感觉 不清楚.. 背景 在使用 ...

  6. Docker(二十)-Docker容器CPU、memory资源限制

    背景 在使用 docker 运行容器时,默认的情况下,docker没有对容器进行硬件资源的限制,当一台主机上运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU.内存和磁盘资源.如果不 ...

  7. 003.Docker容器管理

    一 docer运行应用 1.1 常见容器运行 root@docker:~# docker #查看docker相关命令 root@docker:~# docker run -d -p 80:80 htt ...

  8. docker 知识点汇总

    目录 什么是 Docker Docker 简介 Docker 的特点 如何使用 Docker 镜像的常用操作 容器的常用操作 Docker 命令汇总 手工制作 java 镜像 使用 Dockerfil ...

  9. 关于ubuntu 16.04 docker常用命令

    1.sudo docker ps -a 查看当前docker实例的信息: CONTAINER ID        IMAGE               COMMAND                 ...

随机推荐

  1. 【LeetCode】548. Split Array with Equal Sum 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力 日期 题目地址:https://leetcode ...

  2. uniapp使用uni.openDocument打开文件时,安卓打开成功,iOS打开失败【原因:打开的文件的文件名是中文】

    解决办法:使用escape进行文件名编码 uni.downloadFile({ url: url, success: function(res) { var filePath = res.tempFi ...

  3. 简单学生管理系统HTML前端页面

    效果图: 实现代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...

  4. Red Scarf abc171_E

    题目大意 除去一个元素后的异或和 题目分析 首先异或有交换律 \(a \ \mathrm{xor} \ a=0\) \(0 \ \mathrm{xor} \ a=a\) 可以求出异或和,在异或当前元素 ...

  5. vue - 搭建 webapp 自适应项目-使用 vant 组件库 并 可自动调节大小

    1.创建个vue 项目,这里不详细写怎么创建,参考 vue - 指令创建 vue工程 - 岑惜 - 博客园 (cnblogs.com) https://www.cnblogs.com/c2g52013 ...

  6. 解决MySQL服务器禁止远程连接的问题

    1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 " ...

  7. Java8的stream用法整理

    map 1 直接获取对象的值 this.categoryMapper.selectByIdList(ids).stream().map(Category::getName).collect(Colle ...

  8. vue3.0+vite+ts项目搭建-postcss-pxtorem 实现移动自适应(五)

    这里不考虑大屏,所以不做amfe-flexible的配置 首先是安装依赖 yarn add postcss-loader postcss-pxtorem -D yarn add autoprefixe ...

  9. SYCOJ304末尾0的个数

    https://oj.shiyancang.cn/Problem/304.html 首先数据范围不可能算出来的,那么就要看数的性质. 0是怎么来的首先我们知道,有一个0,就必然会有一个5和2. n!在 ...

  10. HDU 1009 FatMouse' Trade (贪心)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1009 题目大意:肥鼠准备了 磅的猫粮,准备和看管仓库的猫交易,仓库里装有他最喜爱的食物 豆.仓库有 个 ...