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.sh

docker 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
在宿主机查看
top

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Intel® Enclave Access Control and Data Structures(二)

文章目录 前言一、Overview of Enclave Execution Environment二、Terminology三、Access-control Requirements四、Segment-based Access Control五、Page-based Access Control5.1 Access-control for Accesses that Originate from non-SGX Instructions5.2 Memory Accesses…

原码,补码,反码(极简版)

原码补码反码 都有符号位,0表示正数,1表示负数 正数 正数的原码,补码,反码都相同 负数 负数的原码,最高位是1,其余的用正常二进制表示 负数的反码,对原码进行符号位不变,其余位…

网站高性能架构设计——web前端与池化

从公众号转载,关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、高性能浏览器访问 1.减少HTTP请求 HTTP协议是无状态的应用层协议,也就是说每次HTTP请求都需要建立通信链路、进行数据传输&#xf…

vue-baidu-map实现在地图上选择范围并解决相关问题

vue-baidu-map实现在地图上选择范围并解决相关问题 实现地图上选择不规则范围实现功能遇到的问题1、覆盖物多边形怎么才能盖住覆盖物点2、遇到其他问题 实现地图上选择不规则范围 这个功能比较简单,只需要使用vue-baidu-map插件的覆盖物多边形功能就行了。直接看文…

重生奇迹mu卓越哪里掉的最多

项链篇 [火之项链] 1.地下城:(地狱猎犬怪,骷髅战士,地狱蜘蛛,死灵巫师,毒牛怪,暗黑骑士) 2.失落之塔:(鬼魂,剧毒鬼魂) 3.亚特兰蒂斯:(小巴哈姆特,死亡美人鱼,蓝翼海怪) [雷之项链] 1.地下城:(毒牛怪,暗黑骑士,魔鬼戈登) 2.失落之塔:(鬼魂,剧毒鬼魂,诅咒巫师,牛魔王,恶魔…

二叉树oj题总结

1.检查两颗树是否相同 https://leetcode.cn/problems/same-tree/ 分成子问题和结束条件 ,这里用前序的思想解题(先判断根,再左右子树),不然会很浪费时间。假如左右相等,最后根不同,白白比较了 …

员工持股平台模式有哪几种?

员工持股平台模式 目前在现有的市场环境下持股平台的模式主要有公司型的持股平台以及有限合伙企业的持股平台。 (一)公司型员工持股平台 设立公司型的员工持股平台的唯一目的是为了让平台公司受让母公司的股权,从而实现员工间接持有母公司股权…

自动定量包装机市场研究: 2023年行业发展潜力分析

中国包装机械业取得了快速发展,但也出现了一些低水平重复建设现象。据有关资料显示,与工业发达国家相比,中国食品和包装机械产品品种缺乏25%-30%,技术水平落后15-25年。我国包装专用设备制造行业规模以上企业有319家,主…

宁盾统一身份中台助力某集团公司实现统一身份认证和管理(如泛微OA、微软AD)

某集团公司是一家以钢铁为主业,涉足互联网金融、文化健康、智慧城市、现代物流等多领域的大型现代化企业集团。创业发展已有三十余年,拥有员工人数超万人,为了提升管理效率,同时实现国产化创新和数字化转型,公司采用了…

[MySQL] MySQL复合查询(多表查询、子查询)

前面我们学习了MySQL简单的单表查询。但是我们发现,在很多情况下单表查询并不能很好的满足我们的查询需求。本篇文章会重点讲解MySQL中的多表查询、子查询和一些复杂查询。希望本篇文章会对你有所帮助。 文章目录 一、基本查询回顾 二、多表查询 2、1 笛卡尔积 2、2…

JVM 命令行监控及诊断工具

面试题 你使用过Java虚拟机性能监控和故障处理工具吗?(美图) 怎么打出线程栈信息。(字节跳动) JVM诊断调优工具用过哪些? (京东) 怎么获取 Java 程序使用的内存?堆使用…

Linux学习教程(第十四章 Linux系统服务管理)一

第十四章 Linux系统服务管理(一) 什么是系统服务?服务是在后台运行的应用程序,并且可以提供一些本地系统或网络的功能。 那么,Linux 中常见的服务有那些,这些服务怎么分类,服务如何启动&#x…

diffusers pipeline拆解:理解pipelines、models和schedulers

diffusers pipeline拆解:理解pipelines、models和schedulers 翻译自:https://huggingface.co/docs/diffusers/using-diffusers/write_own_pipeline v0.24.0 diffusers 设计初衷就是作为一个简单且易用的工具包,来帮助你在自己的使用场景中构建…

四十、Saga模式

目录 一、定义 二、流程 三、优点 四、缺点 五、四种模式的对比 一、定义 Saga模式是一种用于处理复杂异步操作流的模式,通常用于React/Redux的应用程序中。在这种模式中,业务逻辑被分成多个离散步骤,每个步骤都是一个Generator函数&…

AUTOSAR CP Port Driver简介

Port Driver 1 背景2 基于 EB 及 TC39X 配置3 Port API 使用1 背景 Port driver 在 AUTOSAR 中是一个比较冷门的模块,基本上在 MCAL 层级,关注的人也少,他由不像其他模块那样通用型比较强,Port 在每种内核的 MCU 的配置都有区别,甚至有些芯片直接没有 Port 模块,使用其他方…

企业级高级美颜美妆SDK解决方案

人们对于美的追求已经不仅仅局限于现实世界,更延伸到了虚拟世界。为了满足这一需求,美摄科技全新开发了一款高级美颜美妆SDK,为企业提供了一站式的美颜美妆解决方案。 这款全新的美颜美妆SDK,是我们对美颜技术的一次全面升级。它…

Java实现布隆过滤器

一、概述 布隆过滤器本质上是一个很长的二进制数组,主要用来判断一个数据存不存在数组里,如果存在就用1表示,不存在用0表示,它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。 …

教你pycharm运行Django第一个项目

文章目录 前言搭建Django:1.新建Django项目:2.为Django项目指定远程中创建的虚拟环境下的python解释器:3.配置ubuntu的端口转发(添加端口号为1234的端口):关于Python技术储备一、Python所有方向的学习路线二、Python基…

Nacos源码解读07——集群数据同步

Distro协议背景 Distro 协议是 Nacos 社区自研的⼀种 AP 分布式协议,是面向临时实例设计的⼀种分布式协议, 其保证了在某些 Nacos 节点宕机后,整个临时实例处理系统依旧可以正常工作。作为⼀种有状态 的中间件应用的内嵌协议,Dis…

【软件推荐】文本转语音,语音转wav,导入ue5

文字转语音 在线免费文字转语音 - TTSMaker官网 | 马克配音https://ttsmaker.cn/ 文件转换器 语音转wav Convertio — 文件转换器https://convertio.co/zh/