一,指定内存大小的参数:

[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限制容器使用的内存资源的更多相关文章

  1. docker19.03限制容器使用的cpu资源

    一,用--cpus限制可用的cpu个数 例子: [root@localhost liuhongdi]# docker run -idt --name kafka1 --hostname kafka1 ...

  2. docker19.03搭建私有容器仓库

    一,启动docker后,搜索registry [root@localhost source]# systemctl start docker [root@localhost source]# dock ...

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

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

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

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

  5. docker 限制容器能够使用的资源

    docker 限制容器能够使用的内存,CPU,I/O 资源概述,内存是非可压缩资源,cpu是可压缩资源. 内存用超了,就发送Out Of Memory Exception,容器会被kill掉.所以内存 ...

  6. Docker容器CPU、memory资源限制

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

  7. Docker: 限制容器可用的内存

    默认情况下容器使用的资源是不受限制的.也就是可以使用主机内核调度器所允许的最大资源.但是在容器的使用过程中,经常需要对容器可以使用的主机资源进行限制,本文介绍如何限制容器可以使用的主机内存. 为什么要 ...

  8. 容器中的JVM资源该如何被安全的限制?

    前言 Java与Docker的结合,虽然更好的解决了application的封装问题.但也存在着不兼容,比如Java并不能自动的发现Docker设置的内存限制,CPU限制. 这将导致JVM不能稳定服务 ...

  9. Spring技术内幕_IOC容器载入Bean定义资源文件

    转自:http://blog.csdn.net/chjttony/article/details/6259723 1.当spring的IoC容器将Bean定义的资源文件封装为Spring的Resour ...

随机推荐

  1. ASP.NET Core 3.x启动时运行异步任务(一)

    这是一个大的题目,需要用几篇文章来说清楚.这是第一篇.   一.前言 在我们的项目中,有时候我们需要在应用程序启动前执行一些一次性的逻辑.比方说:验证配置的正确性.填充缓存.或者运行数据库清理/迁移等 ...

  2. Docker实战(3):Tomcat部署

    运行环境:centos7,Docker version 1.13.1,docker tomcat version 8.5.50 创建文件(为映射文件做准备,非固定) mkdir -p /tomcat/ ...

  3. Linux磁盘管理及LVM讲解(1)

    硬盘接口 从整体的角度上,硬盘接口分为IDE.SATA.SCSI和SAS四种,IDE接口硬盘多用于家用产品中,也部分应用于服务器,SCSI接口的硬盘则主要应用于服务器市场,而SAS只在高端服务器上,价 ...

  4. Jakartase_IO流_ — Commons IO_(IO流终极篇)

    一.前言 Apache Commons IO是Apache基金会创建并维护的Java函数库. 它提供了许多类使得开发者的常见任务变得简单,同时减少重复代码 二.Commons IO 类库 2.1 Fi ...

  5. Flutter学习三之搭建一个简单的项目框架

    上一篇文章介绍了Dart的语法的基本使用,从这篇文章开始,开发一个基于玩Android网站的app.使用的他们开放的api来获取网站数据. 根据网站的结构,我们app最外层框架需要添加一个底部导航栏, ...

  6. Linux 命令: sed

    sed -- sed 命令对于Linux系统来说,在命令行修改,操作文本是非常的方便. 特别是批量的修改某些字符等,是非常省时省力的,非常适合在自动化的脚本中去应用. 如下的几个小例子: 1)如何删除 ...

  7. Oracle学习(三)SQL高级--表结构相关(建表、约束)

    一.建表语句 CREATE DATABASE(创建数据库) --创建数据库 create database 数据库名字; CREATE TABLE(创建表) --创建表 CREATE TABLE 表名 ...

  8. C++ (C#)实现获取NX PART预览图

    VS环境下 C++版本: 1 int GetPreviewImage(const TCHAR* prtFile, const TCHAR* imageFile) 2 { 3 IStorage* pSt ...

  9. modelviewset views

    Python 1.4创建user/serializers.py写序列化器 from rest_ framework import serializers from user .models impor ...

  10. mapreduce的一些简单使用

    一.键值对RDD的创建 1.从文件中加载 /opt目录下创建wordky.txt文件. wordky.txt文件中输入以下三行字符: Hadoop is good Spark is fast Spar ...