docker的资源控制

对容器使用宿主机的资源进行限制。例如:cpu、内容、磁盘I/O

docker使用Linux自带的功能Cgroup功能进行控制

Cgroup是什么?

Cgroup:Control grouos是Linux内核系统提供的一种可以限制、记录、隔离进程组所使用的物理资源机制。

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

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

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

container容器和容器之间公用一个网络命名空间

其他资源依然是隔离的

1、 cpu资源控制

Linux通过CFS(Completely Fair Scheduler):完全公平调度器,来调度各个进程对cpu使用。

CFS的调度周期:100ms

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

只能在容器创建时候进行限制

--cpu-period
#设置容器调度cpu的周期
--cpu-quota
#设置每个周期内容器可以使用cpu的时间
这两者可以配合使用

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

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

docker run -itd --name test1 centos:7 /bin/bash
cd /sys/fs/cgroup/cpu/docker/d62c444a5e4118a078e84be01de30f18372b28dfe7358caee183f4da986fa40a
cat cpu.cfs_quota_us
-1
#如果配置是-1,那么容器在使用宿主机cpu的时间不做任何限制
cat cat cpu.cfs_period_us
100000
#CFS调度周期的产长度
#单位是微秒
#在每个容器内,容器可以使用指定比例的cpu时间。默认情况下都是100毫秒

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

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

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

容器占用cpu的时间

修改配置文件进行cpu限制

docker exec -it test1 bash
yum -y install vim 
vim cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done
chmod 777 cpu.sh
./cpu.shdocker stats test1/id
#可以查看容器的运行占用宿主机资源的情况
docker top test1
#查看容器内的进程pid和容器外的进程pid映射关系修改配置文件进行cpu限制:
docker ps -a
cd /sys/fs/cgroup/cpu/docker/d62c444a5e4118a078e84be01de30f18372b28dfe7358caee183f4da986fa40a
echo 50000 > cpu.cfs_quota_us
在容器中查看是否生效
cd /opt/
top

创建容器时进行cpu限制

创建容器时进行cpu限制:
docker run -itd --name test2 --cpu-quota 40000 centos:7 /bin/bash
docker exec -it test2 bash
vim cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done
chmod 777 cpu.sh
./cpu.sh

设置容器占用cpu的权重比

需要多个容器才能生效

--cpu-shares
#指定容器占用cpu的份额
#默认权重是1024,设置的值只能是1024的倍数
docker run -itd --name test3 --cpu-shares 512 centos:7 /bin/bash
docker run -itd --name test4 --cpu-shares 1024 centos:7 /bin/bash
docker exec -it test3 bash
yum -y install epel-release
yum -y install stress
#下载模拟系统负载的工具
stress -c 4
在宿主机查看
topdocker exec -it test4 bash
yum -y install epel-release
yum -y install stress
stress -c 4
在宿主机查看
docker stats
#不加容器名就是显示所有容器占用情况

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

绑定容器使用指定的cpu

容器只能使用指定的cpu内核

docker run -itd --name test5 --cpuset-cpus 1 centos:7 /bin/bash
docker exec -it test5 bash
yum -y install epel-release
yum -y install stress
stress -c 4
在宿主机查看
top

cpu总结

容器占用cpu的时间

容器占用cpu的权重比(多个容器时,才有效)

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

2、 内存控制

docker run -itd --name test6 -m 512m centos:7 /bin/bash
docker stats

3、 如何限制使用swap(了解即可)

如果需要限制容器使用swap必须和限制内存一起使用

docker run -itd --name test7 -m 512m --memory-swap=1g centos:7 /bin/bash
docker stats

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

2、 如果没有限制swap创建容器。使用swap的空间是-m后面值的2倍

3、 如果设置--memory-swap的值,和内存限制一样,容器就不能使用swap

4、 如果设置-m 512m --memory-swap=-1:表示内存受限,但是容器使用swap空间不再限制

4、 磁盘I/O的限制(了解即可)

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

doker run -itd --name test8 --device-read-bps /dev/sda:1M centos:7 /bin/bash

限制容器在磁盘上的写限制

doker run -itd --name test9 --device-write-bps /dev/sda:1mb centos:7 /bin/bash
docker exec -it test9 bash
dd if=/cev/zero of=123.txt bs=1 count=10 oflag=direct

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

限制容器读取的次数

docker run -itd --name test10 --device-read-iops /dev/sda:100 centos:7 /bin/bash
#限制读取操作每秒100次
#100:表示每秒读100次

限制容器写入的次数

docker run -itd --name test10 --device-write-iops /dev/sda:50 centos:7 /bin/bash
#限制写入的操作每秒50次
#50:表示每秒写50次

如何清理docker占用的磁盘空间

docker system prune -a
#清理docker占用磁盘的空间

docker system prune -a:会删除已经停止的容器,删除所有未被使用的网桥设备、删除所有未被使用的镜像,删除创建容器时的缓存以及无用的数据卷

实验:

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

实验准备:

centos:7 x 3

centos1:占用cpu时间 10000,占用cpu权重256,占用内存1g,绑定cpu:1

centos2:占用cpu时间 20000,占用cpu权重512,占用内存2g,绑定cpu:2

centos3:占用cpu时间 30000,占用cpu权重1024,占用内存512m,绑定cpu:3

使用一条命令完成

Docker pull centos:7
开始创建容器
Centos1:
docker run -itd --name centos1 --cpu-quota 10000 --cpu-shares 256 -m 1g --cpuset-cpus 1 centos:7 /bin/bash
Centos2:
docker run -itd --name centos2 --cpu-quota 20000 --cpu-shares 512 -m 2g --cpuset-cpus 2 centos:7 /bin/bash
Centos3:
docker run -itd --name centos3 --cpu-quota 30000 --cpu-shares 1024 -m 512m --cpuset-cpus 3 centos:7 /bin/bash

创建完成后进入容器

进行cpu时间限制测试

yum -y install vim
vim cpu.sh#!/bin/bash
i=0
while true
do
let i++
done
chmod 777 cpu.sh
./cpu.sh

 

到外部查看

实验完成

总结

怎么对容器使用cpu限制?

1、 容器占用cpu的时间

2、 容器占用cpu的权重

3、 容器绑定cpu

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

-m

swap(了解即可):必须和限制内存一起使用

磁盘I/O(了解即可)

清理docker占用的磁盘空间:会删除已经停止的容器,删除所有未被使用的网桥设备、删除所有未被使用的镜像,删除创建容器时的缓存以及无用的数据卷

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

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

相关文章

鸿蒙(HarmonyOS)北向开发项目编译问题汇总

运行Hello World Hello World 工程可以运行在模拟器中,或者运行在真机设备中。本示例先以选择将 Hello World 工程运行在模拟器中进行说明,如果选择运行在真机设备中,需要先对工程进行签名,然后才能运行在真机设备中。 DevEco S…

el-table自定义表格数据

如上所示: 表格内的数据是:当前班级所在名次段的人数 / 当前班级1至n名的累计人数 5/12 也就是 5/75 需要变更为: 截至到当前名次段总人数(上次考试) / 截至到当前名次段总人数(本次考试&#xff09…

排序的简单理解(上)

1. 排序的概念及引用 1.1 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作(按照我们的需求能够有序的将数据信息排列起来)。 稳定性:假…

工业级路由器在货运物流仓储管理中的应用

工业级路由器在货运物流仓储管理中扮演着重要的角色,为整个物流系统提供了稳定可靠的网络连接和数据传输支持。下面将从以下几个方面介绍工业级路由器在货运物流仓储管理中的应用。 实时监控和追踪:工业级路由器通过与各种传感器、监控设备和物联网设备的…

骨灰级程序员那些年曾经告诉我们的高效学习的态度

一、背景 以前阅读陈皓老师的左耳听风专栏中关于如何高效学习的总结让我收货颇丰,今天总结了一下,分享给大家 老师说: 学习是一件“逆人性”的事,就像锻炼身体一样,需要人持续付出,会让人感到痛苦&#…

Layui实现自定义的table列悬停事件并气泡提示信息

1、概要 使用layui组件实现table的指定列悬停时提示信息&#xff0c;因为layui组件中没有鼠标悬停事件支持&#xff0c;所以需要结合js原生事件来实现这个功能&#xff0c;并结合layui的tips和列的templte属性气泡提示实现效果。 2、效果图 3、代码案例 <!DOCTYPE html&g…

2023自动化测试框架的设计原则你都知道吗?快来看!

1.代码规范 测试框架随着业务推进&#xff0c;必然会涉及代码的二次开发&#xff0c;所以代码编写应符合通用规范&#xff0c;代码命名符合业界标准&#xff0c;并且代码层次清晰。特别在大型项目、多人协作型项目中&#xff0c;如果代码没有良好的规范&#xff0c;那么整个框架…

Linux进程控制

Linux进程控制 一.进程创建(fork函数)二.进程终止1.退出码的概念2.查看错误码3.查看错误码对应的错误信息1.strerror2.函数退出时的错误码2.自定义错误码 4.进程异常5.exit终止进程6.总结 三.进程等待1.为什么要有进程等待2.wait3.waitpid1.函数介绍2.演示3.利用位运算分别取出…

网工内推 | IT经理,50k*14薪,NP以上即可,七险一金

01 海天瑞声 招聘岗位&#xff1a;IT经理 职责描述&#xff1a; 1、IT基础架构的方案制定、实施和日常维护&#xff0c;包括机房建设运维、服务器配置及运维、网络规划及运维、上网行为管理、电话、电话、监控、门禁等各类弱电系统搭建及运维 2、负责公司环境及网络安全防御体…

【论文阅读】深度学习方法在数字岩石技术中的应用进展

【论文名称】Advances in the application of deep learning methods to digital rock technology 深度学习方法在数字岩石技术中的应用进展 【论文来源】EI检索 【作者单位】长江大学地球物理与油气资源学院、加拿大阿尔伯塔大学土木与环境工程系、东北石油大学地球科学学院、…

微信小程序:用map()将对象数组中的某一项组合成新数组

使用分析 使用map()方法来遍历 info 数组中的每个元素&#xff0c;并整合每一个对象中的某一项进行新数组的重组 效果展示 这里是查询对象数组中的全部name值 原始数据 提取出name的数组 核心代码 var infos items.map(item > item.name); 完整代码&#xff08;用微信小程…

Facebook广告投放常见错误

在进行Facebook广告投放时&#xff0c;很容易犯一些常见的错误。这些错误可能导致广告投资的浪费&#xff0c;影响广告效果并降低回报。本文小编讲一些常见的Facebook广告投放错误&#xff0c;以及如何避免它们。 1、不明确目标受众 广告的成功与否很大程度上取决于你选择的目…

JVM GUI可视化监控及诊断工具

工具既述 使用命令行工具或组合能帮您获取目标Java应用性能相关的基础信息&#xff0c;但它们存在下列局限&#xff1a; 无法获取方法级别的分析数据&#xff0c;如方法间的调用关系、各方法的调用次数和调用时间等&#xff08;这对定位应用性能瓶颈至关重要&#xff09;。要…

人工智能(pytorch)搭建模型22-基于pytorch搭建SimpleBaseline(人体关键点检测)模型,并详细介绍该网络模型与代码实现

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型22-基于pytorch搭建SimpleBaseline(人体关键点检测)模型&#xff0c;并详细介绍该网络模型与代码实现。本文将介绍关于SimpleBaseline模型的原理&#xff0c;以及利用pytorch框架搭建模型…

蓝桥杯物联网竞赛_STM32L071_9_按键矩阵扩展模块

原理图&#xff1a; 矩阵按键原理图&#xff1a; 实验板接口原理图&#xff1a; 得到对应图&#xff1a; 扫描按键原理&#xff1a; 按键的COLUMN1、2、3分别制0&#xff0c;每次只允许其中一个为0其他都是1&#xff08;POW1和POW2正常状况为上拉&#xff09;&#xff0c;当有…

快速排序的非递归实现

上期我们实现了快速排序的递归实现&#xff0c;但是我们知道如果递归深度太深&#xff0c;栈就会溢出&#xff0c;所以我们本期将为大家讲述快速排序的非递归实现&#xff0c;我们需要用到栈的数据结构&#xff0c;我们知道栈中的数据全是在堆区开辟的空间&#xff0c;堆的空间…

【docker】Hello World

搜索hello-world镜像 docker search hello-world拉去镜像 docker pull hello-world查看本地镜像 docker images 运行镜像 docker run hello-world查看所有的容器 docker ps -a查询start状态容器 docker ps 输出介绍 CONTAINER ID: 容器 ID。IMAGE: 使用的镜像。COMMAN…

elementui select中添加新增标签

<el-select v-model"ruleForm.eventType" :placeholder"请选择事件类型&#xff0c;可手动添加" ref"template" clearable visible-change"(v) > visibleChange(v, template)"><el-option v-for"item in eventTypeOp…

【离散数学】——期末刷题题库(欧拉图和哈密顿图)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

遥感图像之多模态检索AMFMN(支持关键词、句子对图像的检索)论文阅读、环境搭建、模型测试、模型训练

一、论文阅读 1、摘要背景 遥感跨模态文本图像检索以其灵活的输入和高效的查询等优点受到了广泛的关注。然而&#xff0c;传统的方法忽略了遥感图像多尺度和目标冗余的特点&#xff0c;导致检索精度下降。为了解决遥感多模态检索任务中的多尺度稀缺性和目标冗余问题&#xff…