docker19.03限制容器使用的内存资源
一,指定内存大小的参数:
[root@localhost liuhongdi]# docker run -idt --name kafka2 --hostname kafka2 -m 200M --memory-swap 230M --privileged kafka:0.1 /usr/sbin/init
5286d44361bfffcb334044f02b7ebe2399a7949aa5d139b1f226e7813a1b3e35
参数:
-m 或 --memory:设置内存的使用限额,例如 100M, 2G –memory-swap:设置 内存+swap 的使用限额
注意:
1,默认情况下,memory和memory-swap参数的值为 -1,即对容器内存和 swap 的使用没有限制。
2,如果在启动容器时只指定 -m 而不指定 --memory-swap,
那么 --memory-swap 默认为 -m 的两倍,比如:
docker run -it -m 200M ubuntu
容器最多使用 200M 物理内存和 200M swap
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,从docker inspect中可以看到设置值:
1,docker inspect查看memory
[root@localhost liuhongdi]# docker inspect kafka2 | grep -i memory
"Memory": 209715200,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 241172480,
"MemorySwappiness": null,
2,docker inspect查看memory+swap
[root@localhost liuhongdi]# docker inspect kafka2 | grep -i memoryswap
"MemorySwap": 241172480,
"MemorySwappiness": null,
三,用docker stats中查看内存限额:
[root@localhost liuhongdi]# docker stats kafka2 --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
5286d44361bf kafka2 0.02% 57.62MiB / 200MiB 28.81% 12.5MB / 222kB 19.7MB / 1.15MB 5
LIMIT一项是我们指定的内存限额数量
四,在容器中测试内存占用的限额是否起作用?
1,
在容器中安装stress
[root@kafka2 source]# wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/s/stress-1.0.4-16.el7.x86_64.rpm
[root@kafka2 source]# rpm -ivh stress-1.0.4-16.el7.x86_64.rpm
2,执行测试:
[root@kafka2 source]# stress --vm 1 --vm-bytes 280M
stress: info: [261] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: FAIL: [261] (415) <-- worker 262 got signal 9
stress: WARN: [261] (417) now reaping child worker processes
stress: FAIL: [261] (451) failed run completed in 6s
[root@localhost liuhongdi]#
线程报错,容器退出了
因为280M超出最大200M的限额
3, stress命令两个参数的含义:
-m --vm n 产生n个进程,每个进程不断调用内存分配malloc和内存释放free函数
--vm-bytes B 指定malloc时内存的字节数 (默认256MB)
--vm-hang N 指示每个消耗内存的进程在分配到内存后转入休眠状态,与正常的无限分配和释放内存的处理相反,
这有利于模拟只有少量内存的机器
4,用docker ps -a查看
[root@localhost liuhongdi]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5286d44361bf kafka:0.1 "/usr/sbin/init" 16 minutes ago Exited (137) 4 minutes ago kafka2
状态成了 :Exited
5,说明:生产环境中,对docker进行内存限额非常重要,
否则很容易出现容器给整个主机造成oom
五,查看docker的版本:
[root@localhost liuhongdi]# docker --version
Docker version 19.03.8, build afacb8b
docker19.03限制容器使用的内存资源的更多相关文章
- docker19.03限制容器使用的cpu资源
一,用--cpus限制可用的cpu个数 例子: [root@localhost liuhongdi]# docker run -idt --name kafka1 --hostname kafka1 ...
- docker19.03搭建私有容器仓库
一,启动docker后,搜索registry [root@localhost source]# systemctl start docker [root@localhost source]# dock ...
- [转帖]Docker容器CPU、memory资源限制
Docker容器CPU.memory资源限制 https://www.cnblogs.com/zhuochong/p/9728383.html 处理事项内容等 这一块内容感觉 不清楚.. 背景 在使用 ...
- Docker(二十)-Docker容器CPU、memory资源限制
背景 在使用 docker 运行容器时,默认的情况下,docker没有对容器进行硬件资源的限制,当一台主机上运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU.内存和磁盘资源.如果不 ...
- docker 限制容器能够使用的资源
docker 限制容器能够使用的内存,CPU,I/O 资源概述,内存是非可压缩资源,cpu是可压缩资源. 内存用超了,就发送Out Of Memory Exception,容器会被kill掉.所以内存 ...
- Docker容器CPU、memory资源限制
背景 在使用 docker 运行容器时,默认的情况下,docker没有对容器进行硬件资源的限制,当一台主机上运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU.内存和磁盘资源.如果不 ...
- Docker: 限制容器可用的内存
默认情况下容器使用的资源是不受限制的.也就是可以使用主机内核调度器所允许的最大资源.但是在容器的使用过程中,经常需要对容器可以使用的主机资源进行限制,本文介绍如何限制容器可以使用的主机内存. 为什么要 ...
- 容器中的JVM资源该如何被安全的限制?
前言 Java与Docker的结合,虽然更好的解决了application的封装问题.但也存在着不兼容,比如Java并不能自动的发现Docker设置的内存限制,CPU限制. 这将导致JVM不能稳定服务 ...
- Spring技术内幕_IOC容器载入Bean定义资源文件
转自:http://blog.csdn.net/chjttony/article/details/6259723 1.当spring的IoC容器将Bean定义的资源文件封装为Spring的Resour ...
随机推荐
- Linux系统环境基于Docker搭建Mysql数据库服务实战
开放端口规划: mysql-develop:3407 mysql-test: 3408 mysql-release: 3409 ps: 1.不推荐使用默认端口-3306,建议自定义端口 2.如果采用阿 ...
- mysql版本和模式查询
查找数据库的: select version() select @@sql_mode 上面是查版本号,下面是查sql-mode,改sql-model要在mysql目录下配置文件 my.ini, 改修改 ...
- CentOS6.10下安装MongoDB和Redis
安装mongodb 首先考虑离线安装,但是安装过程中在启动服务的时候出现了问题,centOS出于稳定原因考虑,系统自带的glibc版本过低, 而编译需要使用较高版本,这个问题我查询了一下,需要升级gl ...
- vue项目Windows Server服务器部署IIS设置Url重写
1.将vue项目使用npm run build命令打包后将dist文件夹内的文件全部拷贝到服务器. 2.IIS添加应用程序池,.NET CLR版本选择无托管代码 3.添加网站,应用程序池选择刚刚添加的 ...
- js中的鼠标滚轮事件
## 事件对象 event 1 event事件对象,表示用来获取事件的详细信息,比如得到鼠标的横坐标:事件对象.clientX(clientX是可视区坐标) window.onclick = func ...
- Spring中同一个service中方法相互调用事务不生效问题解决方案
问题描述: 我们在用Spring框架开发Web项目过程中,经常需要用同一个service中的一个方法调用另一个方法,如果此时调用方没有添加事务注解@Transactional,而在被调用方添加事务注解 ...
- 云计算openstack——维护(15)
- redis部署问题
在部署redis哨兵的时候,一开始一直都是失败:杀死master进程后,没有选出新的master 日志如下 9985:X 18 Feb 20:14:42.409 # +sdown master mym ...
- Spring Cloud Alibaba生态探索:Dubbo、Nacos及Sentinel的完美结合
@ 目录 背景 一.项目框架 1.1 采用IDEA和Maven多模块进行项目搭建 1.2 模块管理及版本管理 二.微服务公共接口 2.1 定义一个公共接口Api 2.2 pom.xml 2.3 Goo ...
- volatile关键字解释和使用
一.java内存模型的相关概念:原子性.可见性与有序性 原子性: 原子是世界上的最小单位,具有不可分割性.比如 a=0:(a非long和double类型) 这个操作是不可分割的,那么我们说这个操作时原 ...