docker内存限制
默认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内存限制的更多相关文章
- docker内存监控与压测
一直运行的docker容器显示内存已经耗尽,并且容器内存耗尽也没出现重启情况,通过后台查看发现进程没有占用多少内存.内存的监控使用的是cadvisor,计算方式也是使用cadvisor的页面计算方式, ...
- docker内存和cpu调试
本地启动了一个sshd的容器服务,但该容器经常会被重启导致ssh连接失败,使用kubectl describe pod命令查看改命令发现有容器返回值为137,一般是系统环境原因,且一般为内存不足导致的 ...
- Docker 容器内存限制 - 八
Docker 内存限制: centos /bin/bash 查看容器实例 内存限制: 限制容器内存大小:docker run -d -i -t -m 256M --memory-swap 512M ...
- docker高级应用之cpu与内存资源限制(转)
时间:2015-06-09 14:01:52 阅读:1581 评论:0 收藏:0 [点我收藏+] 标签:docker资源限制 docker cpu限制 ...
- [转帖]Docker容器CPU、memory资源限制
Docker容器CPU.memory资源限制 https://www.cnblogs.com/zhuochong/p/9728383.html 处理事项内容等 这一块内容感觉 不清楚.. 背景 在使用 ...
- Docker(二十)-Docker容器CPU、memory资源限制
背景 在使用 docker 运行容器时,默认的情况下,docker没有对容器进行硬件资源的限制,当一台主机上运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU.内存和磁盘资源.如果不 ...
- 003.Docker容器管理
一 docer运行应用 1.1 常见容器运行 root@docker:~# docker #查看docker相关命令 root@docker:~# docker run -d -p 80:80 htt ...
- docker 知识点汇总
目录 什么是 Docker Docker 简介 Docker 的特点 如何使用 Docker 镜像的常用操作 容器的常用操作 Docker 命令汇总 手工制作 java 镜像 使用 Dockerfil ...
- 关于ubuntu 16.04 docker常用命令
1.sudo docker ps -a 查看当前docker实例的信息: CONTAINER ID IMAGE COMMAND ...
随机推荐
- 【LeetCode】694. Number of Distinct Islands 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetcod ...
- 【LeetCode】649. Dota2 Senate 解题报告(Python)
[LeetCode]649. Dota2 Senate 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地 ...
- 【剑指Offer】顺时针打印矩阵 解题报告(Python)
[剑指Offer]顺时针打印矩阵 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...
- 第五十个知识点:什么是BLS基于对的签名方案?
第五十个知识点:什么是BLS基于对的签名方案? BLS签名方案使用了椭圆曲线上了Weil对,本质上是一个在曲线上除n划分的双线性形式,使用 \(n^{th}\) 个单位根. 假设我们有一个椭圆曲线\( ...
- 大数据分布式存储之Cassandra
分布式存储区别于集中式数据库存储,通过网络将海量数据存储到企业的各个数据节点(可能分布到不同的数据中心或机架上): 分布式存储需要考虑的问题 元数据管理 元数据是指数据本身的标识,通过元数据能很快的找 ...
- Winform中使用HttpClient与后端api服务进行交互
前端js可以使用ajax.axios发出http请求 在c#中winform.控制台等可以通过WebRequest.WebClient.HttpClient 有关三个类的性能对比大家可以自己搜一下,这 ...
- [炼丹术]使用Pytorch搭建模型的步骤及教程
使用Pytorch搭建模型的步骤及教程 我们知道,模型有一个特定的生命周期,了解这个为数据集建模和理解 PyTorch API 提供了指导方向.我们可以根据生命周期的每一个步骤进行设计和优化,同时更加 ...
- Linux的基本目录结构
- 初识python: 斐波拉契数(生成器获取)
使用 生成器(yield) 获取斐波拉契数. 代码如下: def fun(n): a,b,c = 0,0,1 while a < n: yield b # b, c = c, b + c 以下 ...
- Flask + flask_sqlalchemy + jq 完成书籍展示、新增、删除功能
后端代码 from flask import Flask, render_template, request, jsonify from flask_wtf.csrf import CSRFProte ...