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 ...
随机推荐
- ASP.NET Core 3.x启动时运行异步任务(一)
这是一个大的题目,需要用几篇文章来说清楚.这是第一篇. 一.前言 在我们的项目中,有时候我们需要在应用程序启动前执行一些一次性的逻辑.比方说:验证配置的正确性.填充缓存.或者运行数据库清理/迁移等 ...
- Docker实战(3):Tomcat部署
运行环境:centos7,Docker version 1.13.1,docker tomcat version 8.5.50 创建文件(为映射文件做准备,非固定) mkdir -p /tomcat/ ...
- Linux磁盘管理及LVM讲解(1)
硬盘接口 从整体的角度上,硬盘接口分为IDE.SATA.SCSI和SAS四种,IDE接口硬盘多用于家用产品中,也部分应用于服务器,SCSI接口的硬盘则主要应用于服务器市场,而SAS只在高端服务器上,价 ...
- Jakartase_IO流_ — Commons IO_(IO流终极篇)
一.前言 Apache Commons IO是Apache基金会创建并维护的Java函数库. 它提供了许多类使得开发者的常见任务变得简单,同时减少重复代码 二.Commons IO 类库 2.1 Fi ...
- Flutter学习三之搭建一个简单的项目框架
上一篇文章介绍了Dart的语法的基本使用,从这篇文章开始,开发一个基于玩Android网站的app.使用的他们开放的api来获取网站数据. 根据网站的结构,我们app最外层框架需要添加一个底部导航栏, ...
- Linux 命令: sed
sed -- sed 命令对于Linux系统来说,在命令行修改,操作文本是非常的方便. 特别是批量的修改某些字符等,是非常省时省力的,非常适合在自动化的脚本中去应用. 如下的几个小例子: 1)如何删除 ...
- Oracle学习(三)SQL高级--表结构相关(建表、约束)
一.建表语句 CREATE DATABASE(创建数据库) --创建数据库 create database 数据库名字; CREATE TABLE(创建表) --创建表 CREATE TABLE 表名 ...
- C++ (C#)实现获取NX PART预览图
VS环境下 C++版本: 1 int GetPreviewImage(const TCHAR* prtFile, const TCHAR* imageFile) 2 { 3 IStorage* pSt ...
- modelviewset views
Python 1.4创建user/serializers.py写序列化器 from rest_ framework import serializers from user .models impor ...
- mapreduce的一些简单使用
一.键值对RDD的创建 1.从文件中加载 /opt目录下创建wordky.txt文件. wordky.txt文件中输入以下三行字符: Hadoop is good Spark is fast Spar ...