飞天使-docker知识点8-docker的资源限制

news2024/11/29 6:39:03

文章目录

        • 容器资源限制
        • 示例
        • OOM 优先级机制
        • 内存限制参数
        • swap 限制

容器资源限制

Docker提供了多种资源限制的方式,可以根据应用程序的需求和系统资源的可用性进行选择。以下是一些常见的Docker资源限制及其使用情况:

CPU限制:通过设置CPU的配额(quota)和周期(period),可以限制容器使用的CPU时间片。这种资源限制在大多数情况下被广泛使用,以确保容器之间公平地共享CPU资源。

内存限制:通过设置容器的最大内存限制,可以限制容器使用的物理内存量。这对于避免容器过度消耗系统内存并导致系统崩溃非常有用。

网络带宽限制:可以使用Docker网络驱动程序设置容器的网络带宽限制。这对于保证网络资源的公平分配以及限制容器对网络的占用非常有用。

磁盘IO限制:可以使用I/O调度程序或限制磁盘带宽来限制容器的磁盘IO。这对于避免容器对磁盘资源的过度占用以及确保系统磁盘性能的稳定性非常重要。

GPU限制:对于需要使用GPU资源的容器,可以使用专门的GPU管理工具(如NVIDIA Docker)来限制容器对GPU的访问。

在实际应用中,CPU和内存限制是最常见的资源限制方式,因为它们可以直接影响容器的性能和稳定性。但具体使用哪种资源限制最多还是要根据应用场景和需求来决定。不同的应用可能对不同的资源有不同的需求,因此在使用Docker时需要根据具体情况进行调整和优化。


当容器内存资源不足时,Linux内核会使用Out of Memory(OOM)机制选择一个或多个进程进行杀死,以释放内存。如果你希望在容器内存不足时禁用OOM,可以通过以下方式进行设置:

在运行容器时设置--oom-kill-disable参数:

docker run --oom-kill-disable my-container
这将禁用容器的OOM机制,使其在内存不足时不会被自动终止。

在容器中设置oom_score_adj值:
在容器内部,你可以使用echo命令将oom_score_adj设置为一个较高的值,表示容器对OOM机制的“免疫力”更强。

echo -1000 > /proc/self/oom_score_adj
这将使得容器内的进程在OOM发生时更不可能被选中终止。

请注意,禁用OOM机制可能会导致内存问题进一步扩大,可能导致系统性能下降或容器崩溃。因此,在实际应用中,建议根据实际情况和需求来权衡是否禁用OOM机制,并确保适当的内存资源可供容器使用。


主要是限制 cpu 和 内存,磁盘io 限制没有用
cpu是可压缩性资源
内存不是可压缩性资源

oom_adj 调整可以避免oom 的出现

--oom-kill-disable  

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

示例
当使用Docker时,最常用的资源限制是CPU和内存限制。以下是它们的简要说明:

CPU资源限制:

--cpus:通过设置该参数,可以限制容器可以使用的CPU核心数。例如,使用--cpus=2表示容器最多可以使用2个CPU核心。
--cpu-shares:通过设置该参数,可以为容器分配CPU时间片的相对权重。较高的权重值表示容器将获得更多的CPU时间。默认情况下,所有容器的权重值相等。
内存资源限制:

--memory:通过设置该参数,可以限制容器可以使用的物理内存量。例如,使用--memory=4g表示容器最多可以使用4GB的内存。
--memory-swap:通过设置该参数,可以限制容器可以使用的交换空间(swap)。例如,使用--memory-swap=8g表示容器最多可以使用8GB的交换空间,这包括实际内存和交换空间的总和。
这些参数可以在运行容器时通过docker run命令进行设置,例如:

docker run --cpus=2 --memory=4g my-container
这样就会限制容器只能使用2个CPU核心和最多4GB的内存。

需要注意的是,CPU和内存的资源限制应根据实际需求进行调整,以确保容器能够正常工作并且不过度占用系统资源。根据应用程序的要求和系统的可用资源,可以灵活地设置适当的限制。

OOM 优先级机制
/proc/PID/oom_score_adj #范围为-1000 到 1000,值越高越容易被宿主机
kill 掉,如果将该值设置为-1000,则进程永远不会被宿主机 kernel kill。
/proc/PID/oom_adj #范围为-17 到+15,取值越高越容易被干掉,如果是-17,
则表示不能被 kill,该设置参数的存在是为了和旧版本的 Linux 内核兼容。
/proc/PID/oom_score #这个值是系统综合进程的内存消耗量、CPU 时间
(utime + stime)、存活时间(uptime - start time)和 oom_adj 计算出的进程得
分,消耗内存越多得分越高,越容易被宿主机 kernel 强制杀死
内存限制参数
-m or --memory #容器可以使用的最大内存量,如果设置此选项,则允许的
最小存值为 4m (4 兆字节)


--memory-swap #容器可以使用的交换分区大小,必须要在设置了物理内存
限制的前提才能设置交换分区的限制

--memory-swappiness #设置容器使用交换分区的倾向性,值越高表示越倾
向于使用 swap 分区,范围为 0-100,0 为能不用就不用,100 为能用就用。

--kernel-memory #容器可以使用的最大内核内存量,最小为 4m,由于内核
内存与用户空间内存隔离,因此无法与用户空间内存直接交换,因此内核内存不
足的容器可能会阻塞宿主主机资源,这会对主机和其他容器或者其他服务进程产
生影响,因此不要设置内核内存大小

--oom-kill-disable #默认情况下,发生 OOM 时,kernel 会杀死容器内进程,
但是可以使用--oom-kill-disable 参数,可以禁止 oom 发生在指定的容器上,
即 仅在已设置-m / - memory 选项的容器上禁用 OOM,如果-m 参数未配
置,产生 OOM 时,主机为了释放内存还会杀死系统进程。

--memory-reservation #允许指定小于--memory 的软限制,当 Docker
检测到主机上的争用或内存不足时会激活该限制,如果使用
--memory-reservation,则必须将其设置为低于--memory 才能使其优先。 因
为它是软限制,所以不能保证容器不超过限制
swap 限制
--memory-swap #只有在设置了 --memory 后才会有意义。使用 Swap,可
以让容器将超出限制部分的内存置换到磁盘上,WARNING:经常将内存交换到
磁盘的应用程序会降低性能

--memory-swap #值为正数, 那么--memory 和--memory-swap 都必须要
设置,--memory-swap 表示你能使用的内存和 swap 分区大小的总和,例如:
--memory=300m, --memory-swap=1g, 那么该容器能够使用 300m 内存和
700m swap,即--memory 是实际物理内存大小值不变,而 swap 的实际大小
计算方式为(--memory-swap)-(--memory)=容器可用 swap





参考资料马哥

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1318324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AUTOSAR ComM模块配置以及代码

ComM模块配置以及代码执行流程 1、基本的一个通道的配置列表 ComMNmVariant 概念的个人理解: FULL: 完全按照AUTOSAR NM方式进行调用 LIGHT :设置一个超时时间,在请求停止通信的时候开始计时,超时之后才会进入FULLCOM…

processon使用及流程图和泳道图的绘画(登录界面流程图,门诊流程图绘制门诊泳道图,住院泳道图,OA会议泳道图),Axure自定义元件

目录 一.processon图形的使用场景介绍 二.流程图绘画 三.泳道图的绘画 1.绘制门诊流程图绘制门诊泳道图 2. 绘制住院泳道图​编辑 3.绘制药库采购入库流程图 4.绘制OA会议泳道图 四.Axure自定义元件 1.Axure载入元件库 一.processon图形的使用场景介绍 二.流程图绘画 示例&…

【案例】注册表简介,新建一个右键菜单打开方式选项

这里写目录标题 来源注册表的介绍注册表编辑器VScode的打开方式菜单![image-20231217201730121](https://img-blog.csdnimg.cn/img_convert/56c02643df9e8ec3afb4f3ac5cc0cdd5.png)如何自定义一个右键菜单备份注册表新建一个菜单选项”右键用记事本打开“ DWORDQWORD可扩充字符…

MySQL数据库,表的增量备份与恢复

1. 从物理与逻辑的角度 数据库备份可以分为物理备份和逻辑备份。物理备份是对数据库操作系统的物理文件(如数据 文件,日志文件等)的备份。这种类型的备份适用于在出现问题时需要快速恢复的大型重要数据库。 物理备份又可以分为冷备份&#xf…

WPF——命令commond的实现方法

命令commond的实现方法 属性通知的方式 鼠标监听绑定事件 行为:可以传递界面控件的参数 第一种: 第二种: 附加属性 propa:附加属性快捷方式

I/O流的相关内容

首先我们了解一下什么是文件: 文件其实就是让我们用来保存数据的地方,它可以用来保存信息,图片,以及音频等各类数据。 文件流: 那我们是如何通过我们的程序来进行对文件的操作呢?这里我们就要提出一个概…

记录 | gpu docker启动报错libnvidia-ml.so.1: file exists: unknown

困扰了两天的问题,记录一下 问题出在启动一个本身已经安装 cuda 的镜像上,具体来说,我是启动地平线天工开物工具链镜像的时候出现的问题,具体报错如下: docker: Error response from daemon: failed to create task …

【SpringMVC】SpringMVC简介、过程分析、bean的加载和控制

文章目录 1. SpringMVC简介2. SpringMVC入门案例文件结构第一步:坐标导入第二步:创建SpringMVC容器的控制器类第三步:初始化SpringMVC环境,设定Spring加载对应的bean第四步:初始化Servlet容器,加载SpringMV…

腾讯技术工程总结-如何写好技术文章?

文章参考:腾讯技术工程《写好一篇高质量的技术文章》 如何写好技术文章? 大家可以先思考一下,为什么要写技术文章? 我们写技术文章的目的是什么呢?面向哪些人呢? 面向人群 写技术文章的目的毫无疑问是为…

linux应急响应基础和常用命令

linux应急响应 linux应急响应基础和常用命令基于linux系统本身进行应急响应。 系统基础信息获取 获取linux服务器基本信息 命令: uname -a内存cpu信息 cat /proc/cpuinfo cat /proc/meminfo lscpu free -m lsmod #查看载入的模块信息进程查看 动态进程查看 …

PDF如何转换制作成翻页电子书

很多朋友想将PDF转换制作成一本翻页电子书,却不知道如何操作。其实,转换翻页电子书的过程并不难,只需要掌握一些基本的技巧和方法就可以了。 基本该怎么操作呢? 1.首先需要一个工具帮助我们成功转换,推荐使用FLBOOK这…

系统架构设计师教程(七)系统架构设计基础知识

系统架构设计基础知识 7.1 软件架构概念7.1.1 软件架构的定义7.1.2 软件架构设计与生命周期需求分析阶段设计阶段实现阶段构件组装阶段部署阶段后开发阶段 7.1.3 软件架构的重要性 7.2 基于架构的软件开发方法7.2.1 体系结构的设计方法概述7.2.2 概念与术语7.2.3 基于体系结构的…

【二分查找】自写二分函数的总结

作者推荐 【动态规划】【广度优先搜索】LeetCode:2617 网格图中最少访问的格子数 本文涉及的基础知识点 二分查找算法合集 自写二分函数 的封装 我暂时只发现两种: 一,在左闭右开的区间寻找最后一个符合条件的元素,我封装成FindEnd函数。…

Automotive Bionics

汽车仿生学是一种通过模拟生物系统的某些特征来设计汽车的方法。一些典型的汽车仿生学例子包括: 鲨鱼式车型:这种车型的设计灵感来源于鲨鱼的流线型身体,这种设计能够减少空气阻力和水阻力,提高车辆的燃油效率和行驶速度。 甲壳虫…

JavaSE第7篇:封装

文章目录 一、封装1、好处:2、使用 二、四种权限修饰符三、构造器1、作用2、说明3、属性赋值的过程 一、封装 封装就是将类的属性私有化,提供公有的方法访问私有属性 不对外暴露打的私有的方法 单例模式 1、好处: 1.只能通过规定的方法来访问数据 2.隐藏类的实例细节,方便…

HarmonyOS云开发基础认证考试满分答案(100分)【全网最全-不断更新】【鸿蒙专栏-29】

系列文章: HarmonyOS应用开发者基础认证满分答案(100分) HarmonyOS应用开发者基础认证【闯关习题 满分答案】 HarmonyOS应用开发者高级认证满分答案(100分) HarmonyOS云开发基础认证满分答案(100分&#xf…

DC-4靶场

目录 nmap进行主机发现 尝试反弹shell: 进入交互式shell: Hydra爆破jim用户密码: ssh登录charles : 提权(三种方法): exim4提权…

数据高可用架构设计与实现

大型企业如何实现 MySQL 到 Redis 的同步 前面曾提到过 Read/Write Through 和 Cache Aside 这几种更新缓存的模式或者说策略,这几种策略都存在缓存不命中的可能性,如果缓存没有命中,就需要直接访问数据库以获取数据。—般情况下&#xff0c…

Ansible-playbook编译.yml脚本

1、playbook是什么? 在Ansible中,Playbook是用于配置、部署和管理被控节点的剧本。它由一个或多个play(角色)组成,每个play可以包含多个task(台词,动作)。使用Ansible的Playbook&am…

【Windows】windows11右键默认显示更多选项的办法

Windows11系统的右键菜单显示,需要多点一次“显示更多选项”才能看到所有菜单内容,按下面步骤简单设置一下就能恢复成Windows经典的右键菜单显示。 1. 2.输入命令【reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a…