docker 资源控制

Docker的资源控制

对容器使用宿主机的资源进行限制,如cpu,内存,磁盘I/O

Docker使用linux自带的功能cgroup(control grouos)是linux内核系统提供的一种可以限制,记录,隔离进程组使用的物理资源

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

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

cpu资源控制

linux通过CFS(Completely Fair Scheduler 完全公平调度器),来调度各个进程之间对cpu的使用。CFS的调度100ms,我们也可以自定义容器的调度周期,以及在这个周期时间之内各个容器能够使用cpu的调度时间
--cpu-period设置容器调度cpu的周期,只能在容器创建的时候使用
--cpu-quota设置在每个周期内,容器可以使用cpu的时间,只能在容器创建的时候使用

可以配合使用

CFS周期的有效范围是1ms-1s ,也就是1000~1000000

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

cd /sys/fs/cgroup/cpu/docker/07a4683b9aee2363decbbafcc29e4abed2e5aa6aab8b72807f1ebfda
cat cpu.cfs_period_us
100000
CFS表示调度周期的长度,以微妙为单位,每个周期内,容器可以使用指定比例的cpu时间,默认情况的值是100000,也就是100毫秒cat cpu.cfs_quota_us
-1
如果配置是-1,那么容器在使用宿主机cpu的时间将不做任何限制
如果设为正值,表示在周期内的配额
如果cpu.cfs_quota_us设置为50000,那么容器在一个周期内最多可以使用50毫秒的cpu时间

CFS调度器,100毫秒就是定义了一个周期,在这个周期之内,调度任务(容器)的基本时间单位,100毫秒一次调度容器请求cpu的资源,然后内核把cpu资源分配给容器

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

如何控制容器使用cpu的时间进行限制

docker exec -it test1 bashvim cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done压力测试脚本
[root@docker1 ~]# top

[root@docker1 opt]# docker run -itd --name test6 --cpu-quota 50000 centos:7 /bin/bash
[root@docker1 opt]# docker restart test6
[root@docker1 opt]# docker exec -it test6 bash
[root@181456d16a59 opt]# vi /opt/cpu.sh
[root@181456d16a59 opt]# ./cpu.sh或者
cd /sys/fs/cgroup/cpu/docker/3ed82355f81151c4568aaa6e7bc60ba6984201c
echo 50000 > cpu.cfs_quota_us
docker exec -it 3ed82355f811 /bin/bash
./cpu.sh
可以看到cpu占用率接近50%,cgroups对cpu的控制起了效果,如下图

如何设置cpu资源占用权重比?需要多个容器才能生效

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

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

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

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

[root@docker1 ~]# docker run -itd --name test1 --cpuset-cpus 1,3 centos:7 /bin/bash
[root@2c1de1412eee /]# yum -y install epel-release
[root@2c1de1412eee /]# yum -y install stress
[root@2c1de1412eee /]# stress -c 4
[root@2c1de1412eee /]# top
按一下 1 cpu会展开显示

内存

如何限制容器对内存的使用

[root@docker1 ~]# docker run -itd --name test6 -m 512m centos:7 /bin/bash
指定使用512m的内存,也可以写1g 或者2g

如何限制swap

想要限制容器使用swap必须和限制内存一块使用

[root@docker1 ~]# docker run -itd --name test7 -m 512m --memory-swap=1g centos:7 /bin/bash
如果说限制了内存是512 ,swap是1g,那么test容器能够使用的swap空间=1g-512m
如果不设置:-m 512m 但是使用swap的空间是-m 的两倍
如果设置 --memory-swap的值和内存限制一样,容器不能使用swap空间
-m 512m --memory-swap=-1,内存受限还是512M,但是容器使用swap空间不再限制

练习

创建三容器,分别对三个容器centos:7进行资源限制:
centos1 2 3
centos1:一条命令创建:占用CPU的时间 10000,占用CPU的权重256,占用内存1G,只能使用CPU1
[root@docker1 ~]# docker run -itd --name centos1 --cpu-quota 10000 --cpu-shares 256 -m 1g --cpuset-cpus 1 centos:7 /bin/bashcentos2:一条命令创建:占用CPU的时间 20000,占用CPU的权重512,占用内存2G,只能使用CPU2
[root@docker1 ~]# docker run -itd --name centos2 --cpu-quota 20000 --cpu-shares 512 -m 2g --cpuset-cpus 2 centos:7 /bin/bashcentos3:一条命令创建:占用CPU的时间 30000,占用CPU的权重1024,占用内存512m,只能使用CPU3
[root@docker1 ~]# docker run -itd --name centos3 --cpu-quota 30000 --cpu-shares 1024 -m 512m --cpuset-cpus 3 centos:7 /bin/bash

磁盘 I/O配额

限制容器在磁盘上的读速度
[root@docker1 ~]# docker run -itd --name test8 --device-read-bps /dev/sda:1M centos:7 /bin/bash
限制容器在磁盘上的写限制
[root@docker1 ~]# docker run -itd --name test1 --device-write-bps /dev/sda:1mb centos:7 /bin/bash
[root@docker1 ~]# docker exec -it test1 bash
[root@docker1 ~]# dd if=/cev/zero of=123.txt bs=1 count=10 oflag=directoflag=direct:在使用dd获取空字符集是从文件系统的缓存当中输入,速度是比较快的,禁用文件系统缓存,实打实的直接把数据写入磁盘,可以更真实的测试设备的性能,模拟直接写入物理设备的情况

限制容器读取的次数

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

限制容器写入设备的次数

[root@docker1 ~]# docker run -itd --name test101 --device-write-iops /dev/sda:50 centos:7 /bin/bash限制写入的操作每秒50次
50:表示每秒写50次

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

[root@docker1 ~]# docker system prune -a删除已经停止的容器
- all stopped containers
删除所有未被使用的网桥设备
- all networks not used by at least one container
删除所有未被使用的镜像
- all images without at least one container associated to them
删除创建容器时的缓存以及无用的数据卷- all build cache

总结

怎么对容器使用cpu限制?

1、 容器占用cpu的时间

2、 容器占用cpu的权重

3、 容器绑定cpu

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

-m

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

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

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

相关文章

Python 小程序之动态进度条

动态进度条 文章目录 动态进度条前言一、显示效果二、基本思路1.引入库2.基本参数3.数据处理 三、数据处理1.计算完成百分比2.动态显示进度条3.打印完成时间 总结 前言 大家在下载东西的时候都会看到有一个动态的进度条在那里。进度条走完了也就下载完了。下面我写一个简易版的…

【音视频 | H.264】H.264编码详解

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

浅谈web性能测试

什么是性能测试? web性能应该注意些什么? 性能测试,简而言之就是模仿用户对一个系统进行大批量的操作,得出系统各项性能指标和性能瓶颈,并从中发现存在的问题,通过多方协助调优的过程。而web端的性能测试…

大数据机器学习与深度学习——回归模型评估

大数据机器学习与深度学习——回归模型评估 回归模型的性能的评价指标主要有:MAE(平均绝对误差)、MSE(平均平方误差)、RMSE(平方根误差)、R2_score。但是当量纲不同时,RMSE、MAE、MSE难以衡量模型效果好坏,这就需要用到R2_score。 平均绝对…

专业证件翻译哪里比较正规?

随着国际化的步伐不断加快,我们与国外的交流日益频繁,无论是出国留学、旅游还是商务活动,都离不开证件翻译。那么,在选择证件翻译服务时,我们应该注意哪些事项呢?哪里能找到正规的翻译服务呢? 我…

Python之Requests库使用总结

概述 Requests是python中一个很Pythonic的HTTP库,用于构建HTTP请求与解析响应 Requests开发哲学 Beautiful is better than ugly.(美丽优于丑陋) Explicit is better than implicit.(直白优于含蓄) Simple is better than complex.(简单优于复杂) Complex is bett…

winform使用CefSharp嵌入VUE网页并交互

1、NuGet添加CefSharp 如果下载慢或失败可以更新下载源 腾讯资源https://mirrors.cloud.tencent.com/nuget/华为资源https://repo.huaweicloud.com/repository/nuget/v3/index.json 2、将项目平台改为X64 3、在winform窗体添加cef using CefSharp; using CefSharp.WinForms; u…

【ret2hbp】一道板子测试题 和 SCTF2023 - sycrpg

前言 ret2hbp 主要是利用在内核版本 v6.2.0 之前,cpu_entry_area mapping 区域没有参与随机化的利用。其主要针对的场景如下: 1)存在任意地址读,泄漏内核地址 2)存在无数次任意地址写,泄漏内核地址并提权…

设计模式——观察者模式(Observer Pattern)

概述 观察者模式是使用频率最高的设计模式之一,它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称…

phpstudy搭建WordPress教程

一、phpstudy新建配置WordPress 打开phpstudy,启动Apache(或者Nginx)和MySQL服务 来到数据库部分,点击[创建数据库],填写新建数据库的名称,用户名以及密码,完成后点击确认 来到网站部分&#x…

C++STL的stack和queue(超详解)

文章目录 前言stack栈的题目最小栈JZ31 栈的压入、弹出序列 stack的模拟实现queue的模拟实现 前言 栈和队列这一块其实有数据结构的基础,学起来非常简单。 stack 栈的成员函数就这么写,除了emplace其他都已经非常熟悉了。 stack没有迭代器吗&#xff…

【Linux】锁的简单封装以及原理解析

文章目录 一、锁的原理过程1:过程2过程3过程4 二、 锁的简单封装1.LockGuard.hpp2.使用1.正常锁的使用2.使用封装后的 总结 一、锁的原理 为了实现互斥锁操作,大多数体系结构都提供了swap或exchange指令,该指令的作用是把寄存器和内存单元的数据相交换,由于只有一条…

锂电池基础知识及管理方式总结

这两天在排查一个锂电池无法充电的问题,用的是电池管理芯片BQ25713,网上相关的资料也很少,查看数据手册时,里面也有很多术语参数等不是很理解,所以,在此对锂电池的基础知识做个简单的总结,方面后…

python自动化运维快速入门,python自动化运维教程

大家好,给大家分享一下python自动化运维需要掌握的技能,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 面向学员 熟练使用计算机,对Windows、Linux 有一点了解从业职或在校学生 对目前从事互联网运维,想…

【MySQL】:表的约束(上)

表的约束 一.非空约束二.default约束三.列描述四.zerofill五.主键1.单个主键2.复合主键 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有…

Kubernetes实战(九)-kubeadm安装k8s集群

1 环境准备 1.1 主机信息 iphostname10.220.43.203master10.220.43.204node1 1.2 系统信息 $ cat /etc/redhat-release Alibaba Cloud Linux (Aliyun Linux) release 2.1903 LTS (Hunting Beagle) 2 部署准备 master/与slave主机均需要设置。 2.1 设置主机名 # master h…

做题笔记:SQL Sever 方式做牛客SQL的题目--查询每天刷题通过数最多的前二名用户

----查询每天刷题通过数最多的前二名用户id和刷题数 现有牛客刷题表questions_pass_record,请查询每天刷题通过数最多的前二名用户id和刷题数,输出按照日期升序排序,查询返回结果名称和顺序为: date|user_id|pass_count 表单创建…

论文润色突显研究亮点 papergpt

大家好,今天来聊聊论文润色突显研究亮点,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: 标题:论文润色突显研究亮点――提升论文吸引力的关键步骤 一、引言 在学术研究中&#x…

docker学习(八、mysql8.2主从复制遇到的问题)

在我配置主从复制的时候,遇到了一直connecting的问题。 起初可能是我ip配置的不对,slave_io_running一直connecting。(我的环境:windows中安装了wsl,是ubuntu环境的,在wsl中装了miniconda,mini…

Matter分析与安全验证

本文作者:杉木涂鸦智能安全实验室 什么是matter Matter是一项智能家居的开源标准,由连接标准联盟制定、认证、推广,该标准基于互联网协议(IP),遵循该标准的智能家居设备、移动应用程序和云服务能够进行互…