docker 资源控制

news2025/1/11 23:36:01

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 bash

vim 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内核

Docker run --itd --name test5 --cpuset-cpus 1,3 centos:7 /bin/bash

Docker exec -it test5 bash

Yum -y install epel-reles

Strees -c 4

容器占用cpu的时间

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

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

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

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

创建3个容器分别对三个容器进行资源限制,占用时间

Centos1 占用  cpu的时间10000,占用cpu的权重256 占用内存 1G  

Centos2 占用 cpu时间为20000,占用权重 512 占用内存 2G

Centos3占用cpu时间为30000,占用权重1024 占用内存512m

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

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空间不再限制

磁盘 i/O配额

限制容器再磁盘上的读速度:docker run -itd --name test8 --device-read-bps /dev/sda:1M centos:7 /bin/bash

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

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

Dd if=/dev/zero of-123.txt bs=1M count=10

Dd if=/dev/zero of-123.txt bs=1M count=10 oflag=direct

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

限制容器读取的次数:docker run-itd --name test10 --device-read-iops /dev/sda:100 centos:7 /bin/bash

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

限制容器写入设备的次数:docker run -itd --name test10 --write-iops /dev/sda:50 centos:7 /bin/bash

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

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

Df -h

Docker system prune -a

删除已经停止的容器

删除所有未被使用的网桥设备

删除所有未被使用的镜像

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

总结

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

3种限制方式:容器占用cpu的时间,容器占用cpu的权重,容器绑定cpu指定使用cpu

怎么对宿主机的内存使用限制

-m

-swap:必须和限制内存一块使用 swap要减去内存数值才是swap的使用

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

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

相关文章

python圣诞树代码编程

以下是一个简单的Python圣诞树代码: def draw_tree(height): for i in range(height): print( * (height - i - 1) * * (2 * i 1)) print( * (height - 1) |)draw_tree(10) 这个函数会绘制一个等腰三角形,其中每一行的星号数量从1开…

Java_LinkedList链表详解

目录 前言 ArrayList的缺陷 链表 链表的概念及结构 链表的种类 1.单向或双向 2.带头或不带头 3.循环或不循环 LinkedList的使用 什么是LinkedList LinkedList的使用 LinkedList的构造 LinkedList的其他常用方法介绍 LinkedList的遍历 ArrayList和LinkedList的…

「实用场景教程」如何用日程控件DHTMLX Scheduler制作酒店预订日历?(三)

dhtmlxScheduler是一个类似于Google日历的JavaScript日程安排控件,日历事件通过Ajax动态加载,支持通过拖放功能调整事件日期和时间,事件可以按天,周,月三个种视图显示。 DHTMLX Scheduler正式版下载 在本教程中&…

如何解决el-table中动态添加固定列时出现的行错位

问题描述 在使用el-table组件时,我们有时需要根据用户的操作动态地添加或删除一些固定列,例如操作列或选择列。但是,当我们使用v-if指令来控制固定列的显示或隐藏时,可能会出现表格的行错位的问题,即固定列和非固定列…

Spring全面详解

目录 1. Spring 概述 1.1 Spring是什么 1.2 Spring的作用 1.3 Spring IoC是什么 2. Spring 快速入门 3. Spring Bean 3.1 的实例化方式 空参构造器 3.2 的属性注入 全参构造器注入 setter方法注入 策略模式 3.3 注解管理 3.4 注解方式的属性注入 1. Spring 概述 …

理解VAE(变分自编码器)

1.贝叶斯公式 贝叶斯理论的思路是,在主观判断的基础上,先估计一个值(先验概率),然后根据观察的新信息不断修正(可能性函数)。 P(A):没有数据B的支持下,A发生的概率,也叫做先验概率。…

C++ 关于结构体struct的一些总结

文章目录 一、 结构体(struct)是什么?(1)概念(2)struct 与 calss 的区别 二、定义、声明与初始化(1)三种定义结构体的方法:(2)结构体变量初始化 三、结构体嵌…

老有所依:TSINGSEE青犀养老院智能视频监管方案

养老院智能监控方案是为了提高养老院内老人的安全和护理质量,利用智能技术与监控设备进行全方位的监控和管理,可以加强对老人的监护和护理,提高养老院的服务质量和安全性。 旭帆科技基于视频技术与AI智能分析技术构建的养老院智能视频监控方…

算法:常见的链表算法

文章目录 链表算法两数相加两两交换链表中的节点重排链表合并K个升序链表K个一组翻转链表 总结 本篇总结常见的链表算法题和看他人题解所得到的一些收获 链表算法 关于链表的算法: 画图:画图可以解决绝大部分的数据结构的问题,任何的算法题…

Ubuntu 安装 CUDA 和 cuDNN 详细步骤

我的Linux系统背景: 系统和驱动都已安装。 系统是centos 8。查看自己操作系统的版本信息:cat /etc/issue或者是 cat /etc/lsb-release 用nvidia-smi可以看到显卡驱动和可支持的最高cuda版本,我的是12.2。驱动版本是535.129.03 首先&#…

snakeyaml编辑yaml文件并覆盖注释

文章目录 前言技术积累实战演示1、引入maven依赖2、覆盖注释工具类3、snakeyaml工具类4、测试用例5、测试效果展示 写在最后 前言 最近在做一个动态整合框架的项目,需要根据需求动态组装各个功能模块。其中就涉及到了在application.yaml中加入其他模块的配置&#…

Kubernetes(K8s 1.27.x) 快速上手+实践,无废话纯享版

文章目录 1 基础知识1.1 K8s 有用么?1.2 K8s 是什么?1.3 k8s 部署方式1.4 k8s 环境解析 2 环境部署2.1 基础环境配置2.2 容器环境操作2.3 cri环境操作2.4 harbor仓库操作2.5 k8s集群初始化2.6 k8s环境收尾操作 3 应用部署3.1 应用管理解读3.2 应用部署实…

浏览器提示不安全

当我们使用浏览器访问一个网站时,如果该网站使用的是HTTPS连接,那么浏览器会对其进行安全性的检查。其中一项重要的检查就是确认该网站是否拥有有效的SSL证书。然而,有时我们会在浏览器中看到“不安全”的警告,这通常是由于SSL证书…

【Go自学版】02-goroutine

利用时间片分割进程,致使宏观上A,B,C同时执行(并发) CPU利用率包含了执行和切换,进程/线程的数量越多,切换成本也会增大 最大并行数:GOMAXPROCS work stealing: 偷其他队列的G hand off: 当前G1阻塞&#…

中缀表达式转后缀表达式与后缀表达式计算(详解)

**中缀表达式转后缀表达式的一般步骤如下: 1:创建一个空的栈和一个空的输出列表。 2:从左到右扫描中缀表达式的每个字符。 3:如果当前字符是操作数,则直接将其加入到输出列表中。 4:如果当前字符是运算符&a…

禅道v11.6 基于linux环境下的docker容器搭建的靶场

一、环境搭建 linux环境下的 在docker环境下安装禅道CMS V11.6 docker run --name zentao_v11.6 -p 8084:80 -v /u01/zentao/www:/app/zentaopms -v /u01/zentao/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD123456 -d docker.io/yunwisdom/zentao:v11.6二、常见问题 1.删除…

软件开发的代码审查工具

在进行软件开发时,代码审查(Code Review)是一种非常重要的实践,它有助于发现潜在的问题、提高代码质量,并促使团队成员之间的知识共享。有许多工具可用于简化和优化代码审查过程。以下是一些常见的代码审查工具&#x…

力扣541.反转字符串 II

文章目录 力扣541.反转字符串 II示例代码实现总结收获 力扣541.反转字符串 II 示例 代码实现 class Solution {public String reverseStr(String s, int k) {char[] ans s.toCharArray();for(int i0;i<ans.length;i2*k){int begin i;int end Math.min(ans.length-1,begin…

【EI会议征稿】2024年粤港澳大湾区数字经济与人工智能国际学术会议(DEAI2024)

2024年粤港澳大湾区数字经济与人工智能国际学术会议(DEAI2024) 2024 Guangdong-Hong Kong-Macao Greater Bay Area International Conference on Digital Economy and Artificial Intelligence(DEAI2024) 2024年粤港澳大湾区数字经济与人工智能国际学术会议(DEAI2024)由广东科…