Docker的资源控制

Docker的资源控制:

对容器使用宿主机的资源进行限制。

CPU 内存 磁盘I/O(读写性能)

docker使用linux自带的功能cgroup

control groups是linux内核系统提供的一种可以限制,记录,隔离进程组所使用的物理资源的一种机制。

docker借助这个机制,来实现资源的控制。

cgroup 本身是提供将进程进行分组化管理的功能和接口的基础结构。分配控制的机制来实现资源控制。

host:容器和宿主机共用一个网络命名空间

container:容器和容器之间共用一个网络命名空间。

其他的资源依然是隔离的。

隔离是基础

1、CPU资源控制:

Linux通过CFS(Completely Fail Scheduler 完全公平调度器),来调度各个进程对CPU的使用。CFS的调度周期为100ms。

我们也可以自定义容器的调度周期,以及在这个周期时间内,各个容器能够使用CPU的调度时间。

(注:只能在容器创建时进行限制)

--cpu-period 设置容器调度cpu的周期

--cpu-quota 设置在每个周期内,容器可以使用cpu的时间。

可以配合使用

CFS周期的有效范围:1ms-1s        --cpu-period    1000-1000000毫秒

容器使用cpu的配额时间必须要大于1ms,--cpu-quota的值,必须是>=1000

配额:

cat cpu.cfs_quota_us

-1

如果配置是-1,那么容器在使用宿主机cpu的时间不做任何限制。

cat cpu.cfs_period_us

100000

CFS调度周期的长度,单位微秒,在每个周期内,容器可以使用指定比例的cpu时间,默认情况下都是100ms(毫秒)。

CFS调度器,100毫秒就是定义了一个周期,在这个周期内,调度任务(容器)的基本时间单位。

100毫秒一次调度容器请求cpu的资源。然后内核把cpu的资源分配给容器。

cpu.cfs_quota_us:调度请求之后,根据配额,内核分配给容器使用cpu的时间。

就是100毫秒调度请求一次,每次只能使用这么多

docker stats test1/id:查看容器的运行占用宿主机资源的情况

docker top test1/id:查看容器内PID和宿主机pid的映射关系

设置容器占用cpu的权重比:需要多个容器才能生效。

docker run -itd --name test3 --cpu-shares 512 centos:7 /bin/bash

docker run -itd --name test4 --cpu-shares 1024 centos:7 /bin/bash

--cpu-shares 指定容器占用cpu的份额。默认权重1024,设置的值只能是1024的倍数。

--cpu-shares 是给每个容器使用cpu设置了相对的权重,权重高的,可以使用cpu的资源更多,但是,如果只有一个容器在运行,即使设置了权重,但是没有其他更高的权重的容器来占用资源,权重低的容器依然不受限。

#分别进入容器,进行压力测试
yum install -y epel-release
yum install -y stress

#stress 是一个用于模拟系统负载的工具,它可以测试系统在高负载条件下的稳定性。

stress -c 4                #产生四个进程,每个进程都反复不停的计算随机数的平方根

#查看容器运行状态(动态更新)
docker stats
CONTAINER ID   NAME             CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O         PIDS
c3ee18e65852   c2               66.50%    5.5MiB / 976.3MiB     0.56%     20.4MB / 265kB   115MB / 14.2MB    4
bb02d3b345d8   c1               32.68%    2.625MiB / 976.3MiB   0.27%     20.4MB / 325kB   191MB / 12.7MB    4

设置容器绑定cpu,容器只能使用指定的cpu内核。

docker run -itd --name test5 --cpuset-cpus 1,3

容器占用cpu的时间

容器占用cpu的权重比(多个容器时,才有效,一个容器时,依然不受限)

容器占用cpu的内核数,绑定指定cpu内核给容器使用。

2、内存:限制容器对内存的使用

创建3个容器,分别对这三个容器进行资源限制

centos1  占用cpu的时间  10000(10ms),占用cpu的权重  256   占用内存是  1G 只能使用cpu1

centos2  占用cpu的时间   20000(20ms),占用cpu的权重 512  占用内存  2G 只能使用cpu2

centos3  占用cpu的时间   30000(30ms),占用cpu的权重 1024  占用内存512m 只能使用cpu3

3、限制使用SWAP:想要限制容器使用swap,必须和限制内存一块使用。

先限制内存,再限制swap 两个相减

如果限制了内存是512,swap是1G,那么容器实际上能够使用的swap空间,是1G-512m=512M

如果不设置:-m 512m  实际使用swap的空间是 -m 的两倍  512M*2=1G

如果设置 -memory -swap的值,和内存限制一样,容器就不能使用swap(等于0)

-m 512m -memory-swap=-1,内存首先还是512M,但是容器使用swap空间不再限制。

磁盘I/O配额(了解):

限制容器在磁盘上的读速度:

docker run -itd --name test9 --device-write-bps /dev/sda:1mb centos:7 /bin/bash

dd if=/dev/zero of=123.txt bs=2M count=5 oflag=direct

oflg=direct

在使用dd 获取空字符集是从文件系统的缓存当中输入,速度是比较快的,加了之后就:禁用文件系统缓存,直接把数据写入磁盘,可以更真实的测试设备的性能,模拟直接写入物理设备的情况。

限制容器读取的次数

docker run -itd --name test10 --device-read-iops /dev/sda:100 centos:7 /bin/bash

限制读取操作,每秒是100次

限制容器写入的次数(同样了解即可)

docker run -itd --name test11 --device-write-iops /dev/sda:50 centos:7 /bin/bash

限制写入的操作,每秒是50次

清理docker占用的磁盘空间

docker system prune -a

删除已经停止的容器

删除所有未被使用的网桥设备(docker0、docker1)

删除所有未被使用的镜像

删除创建容器时的缓存,以及无用的数据卷。

总结:

怎么对容器使用cpu进行限制:

1、容器占用cpu的时间

2、容器占用cpu的权重

3、容器绑定cpu

容器对宿主机的内存使用限制

-m 

swap:必须和限制内存一块使用

-m 512m --memory-swap=1g

(1g-512=512)

-m 512m --memory-swap=512m

相等就是0

-m 512m

不写就是两倍(512m*2=1024m)

-m 512m --memory-swap=-1

-1就是不限制

磁盘I/O:

清理docker占用的磁盘空间:

docker system prune -a

删除已经停止的容器

删除所有未被使用的网桥设备(docker0、docker1)

删除所有未被使用的镜像

删除创建容器时的缓存,以及无用的数据卷。

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

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

相关文章

go grpc高级用法

文章目录 错误处理常规用法进阶用法原理 多路复用元数据负载均衡压缩数据 错误处理 gRPC 一般不在 message 中定义错误。毕竟每个 gRPC 服务本身就带一个 error 的返回值,这是用来传输错误的专用通道。gRPC 中所有的错误返回都应该是 nil 或者 由 status.Status 产…

如何克服微服务测试的挑战,并最大化收益

多年来,微服务一直是行业趋势,但组织却未能从该方法中获益,并因发布失败而苦苦挣扎。这些失败通常归结为测试服务之间的接口以获得预期的质量、安全性和性能的困难。 最终,未能以足够稳健的方式测试这些 API。一线希望是遗留 SOA…

cookie总结

cookie和session: 一、Cookie和Session二、使用Cookie保存用户上次的访问时间。三、Cookie常用方法总结乱码问题解决: 一、Cookie和Session 会话:用户从打开浏览器到关闭的整个过程就叫1次会话。 比如有的网站登录过一次,下次再进…

使用 Kubernetes 为 CI/CD 流水线打造高效可靠的临时环境

介绍 在不断发展的科技世界中,快速构建高质量的软件至关重要。在真实环境中测试应用程序是及早发现和修复错误的关键。但是,在真实环境中设置 CI/CD 流水线进行测试可能既棘手又昂贵。 Kubernetes 是一个流行的容器编排平台,提供临时环境解决…

【qt】Qt+OpenCv读取带有中文路径的图片

【opencv4.5.1版本】下载exe解压即可。。。https://opencv.org/releases/page/2/ 【qt5.15.2】 pro文件 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses deprecated APIs. # In order to …

硕士毕业论文格式修改要点_word

目录 0、最开始要做的事情1、更改样式(先善器)2、多级标题(解决自动更新问题必要的基础设置)2、插入图片(1)设置一个图片样式——“无间隔”(2)插入题注(3)修…

【flink番外篇】1、flink的23种常用算子介绍及详细示例(完整版)

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的…

小白学java栈的经典算法问题——第四关白银挑战

内容1.括号匹配问题2.最小栈3.最大栈 1.括号匹配问题 栈的典型题目还是非常明显的,括号匹配、表达式计算等等几乎都少不了栈,本小节我们就看两个最经典的问题 首先是LeetCode20,链接 本道题还是比较简单的,其中比较麻烦的是如何判断两个符…

力扣面试题 08.12. 八皇后(java回溯解法)

Problem: 面试题 08.12. 八皇后 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 八皇后问题的性质可以利用回溯来解决,将大问题具体分解成如下待解决问题: 1.以棋盘的每一行为回溯的决策阶段,判断当前棋盘位置能否放置棋子 2.如何判…

hbuilder + uniapp +vue3 开发微信云小程序

1、创建项目: 2、创建项目完成的默认目录结构: 3、在根目录新建一个文件夹cloudFns(文件名字随便),存放云函数源码: 4、修改manifest.json文件:添加 小程序 appid和cloudfunctionRoot&#xff0…

python的websocket方法教程

WebSocket是一种网络通信协议,它在单个TCP连接上提供全双工的通信信道。在本篇文章中,我们将探讨如何在Python中使用WebSocket实现实时通信。 websockets是Python中最常用的网络库之一,也是websocket协议的Python实现。它不仅作为基础组件在…

pyside/qt03——人机协同的编程教学—直接面向chatGPT实战开发(做中学,事上练)

先大概有个草图框架,一点点丰富 我纠结好久,直接用Python写UI代码 还是用designer做UI 再转Python呢, 因为不管怎么样都要转成Python代码, 想了想还是学一下designer吧,有个中介,有直观理解。 直接这样也可…

智能优化算法应用:基于食肉植物算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于食肉植物算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于食肉植物算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.食肉植物算法4.实验参数设定5.算法结果6.参考…

设计并实现一个多线程图书馆管理系统,涉及数据库操作

没有实现全部功能,希望路过的大佬,可以实现全部功能,在评论区聊聊 创建数据库library-demo CREATE DATABASE library-demo创建图书表book CREATE TABLE book (bookId int(11) NOT NULL AUTO_INCREMENT COMMENT 图书ID,bookName varchar(15)…

HarmonyOS创建JavaScript(类 Web开发模式)项目

上文 HarmonyOS带大家创建自己的第一个Page页面并实现路由跳转(ArkTS)带大家创建了我们项目中第一个自己创建的page 并完成了一个跳转逻辑的编写 上文的开发模式是 ArkTS 的 也被称为 声明式开发范式 还有一种 javaScript的 类Web开发模式 这种方式就类似于我们传统的前端开发模…

基于微群机器人的二次开发

请求URL: http://域名地址/modifyGroupName 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明wId是String登录实例标识chatRoom…

读书笔记-《数据结构与算法》-摘要2[冒泡排序]

冒泡排序 核心:冒泡,持续比较相邻元素,大的挪到后面,因此大的会逐步往后挪,故称之为冒泡。 public class BubbleSort {public static void main(String[] args) {int unsortedArray[] new int[]{6, 5, 3, 1, 8, 7, 2…

Leetcode每日一题学习训练——Python3版(到达首都的最少油耗)

版本说明 当前版本号[20231205]。 版本修改说明20231205初版 目录 文章目录 版本说明目录到达首都的最少油耗理解题目代码思路参考代码 原题可以点击此 2477. 到达首都的最少油耗 前去练习。 到达首都的最少油耗 ​ 给你一棵 n 个节点的树(一个无向、连通、无环…

倒计时模块复习

经典回顾倒计时 倒计时的基本布局介绍。 一个内容区域和一个输入区域,内容区域进行划分 直接使用flex布局会更快一点。 js代码 我们利用一下模块化思想,直接把获得时间这个功能写成一个函数。方便后续的调用 function getTime() {const date new Date…

MES管理系统通过哪些方面提升产品质量管理水平

在当今高度竞争的市场环境中,质量成为了企业生存和发展的关键因素。工厂作为生产产品的核心场所,其质量管理水平直接影响到产品的质量和企业的声誉。为了应对这一挑战,许多工厂引入了MES管理系统解决方案。本文将探讨MES管理系统如何帮助工厂…