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.mzph.cn/news/216962.shtml

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

相关文章

ARM:作业3

按键中断代码编写 代码: key_it.h #ifndef __KEY_IT_H__ #define __KEY_IT_H__#include "stm32mp1xx_gpio.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gic.h"void key1_it_config(); voi…

Chat-Gpt 提示攻略

Chat-Gpt 提示攻略 本篇文章的内容皆来自《ChatGPT 提示的艺术: 制作清晰有效的提示的指南》,本文章根据阅读以后总结出来 提示的关键原则 语言表达清晰,切忌模拟两可明确的目的,切忌话题脱轨及话题散漫相关性,切忌不掺杂与目的…

记录每日LeetCode 72.编辑距离 Java实现

题目描述: 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 初始代码: class Solution {public int minDistan…

WPF的WebBrowser控件

在 WPF 中显示网页&#xff0c;你可以使用 WebBrowser 控件来实现。WebBrowser 控件是一个嵌入式的浏览器控件&#xff0c;可以加载和显示网页内容。 以下是在 WPF 中显示网页的示例代码&#xff1a; <Window x:Class"WpfApp.MainWindow"xmlns"http://sche…

基于 ESP32-S3 的 Walter 开发板

Walter 是一款基于 ESP32-S3 且拥有 5G LTE 连接功能的新型开源开发套件。 近日&#xff0c;比利时公司 DPTechnics BV 推出了一款基于乐鑫 ESP32-S3 且拥有 5G LTE 连接功能的新型开源开发套件。该套件即将在 Crowd Supply 平台上发布&#xff0c;您可以点击此处了解详情。 无…

class068 更多的动态规划【算法】

class068 更多的动态规划【算法】 算法讲解068【必备】见识更多二维动态规划题目 code1 115. 不同的子序列 // 不同的子序列 // 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数 // 测试链接 : https://leetcode.cn/problems/distinct-subseque…

Mac如何设置control+space切换上一中输入法

#设置方法# *搜索输入法 系统设置-搜索&#xff1a;输入法&#xff0c;并点击键盘快捷键 *点击输入法&#xff0c;勾选&#xff1a;选择上一个输入法&#xff0c;点击完成。

漂亮的WPF界面 流行的一个界面,向上悬浮的窗口,终于试成功了

目前随便打开个APP&#xff0c;就可以看到一个悬浮的窗口 今天测试一下目前流行的一个界面&#xff0c;向上悬浮的窗口&#xff0c;终于试成功了。看着还不错的。

AcWing刷题(循环语句)------C语言版

1.&#xff08;708&#xff09;偶数&#xff1a; 编写一个程序&#xff0c;输出 11 到 100100 之间&#xff08;包括 11 和 100100&#xff09;的全部偶数。 输入格式 无输入。 输出格式 输出全部偶数&#xff0c;每个偶数占一行。 输入样例 No input 输出样例 2 4 6 ...…

详解FreeRTOS:事件标志组(高级篇—5)

目录 1、事件运作机制 2、事件标志组数据类型 3、创建事件标志组 4、设置事件位

.net core提示The xx field is required,One or more validation errors occurred

访问接口时缺少model中的参数时&#xff0c;会提示&#xff1a; The xx field is required One or more validation errors occurred原因是.net core webapi默认参数为不可空&#xff0c;因此会验证并报错。 解决方案&#xff1a; 在项目的.csproj中&#xff0c;修改Nullable…

php面试题

面试题1: 反转字符串 编写一个PHP函数&#xff0c;接受一个字符串参数&#xff0c;并返回该字符串的反转版本。 <?php function reverseString($str) {return strrev($str); }// 测试示例 $string "Hello, World!"; $reversedString reverseString($string);…

Leetcode—2960.统计已测试设备【简单】

2023每日刷题&#xff08;五十六&#xff09; Leetcode—2960.统计已测试设备 实现代码 int countTestedDevices(int* batteryPercentages, int batteryPercentagesSize) {int cnt 0;int ans 0;for(int i 0; i < batteryPercentagesSize; i) {int t batteryPercentage…

Linux软件管理:rpm软件包与yum管理工具

linux 软件 大家有想过平时我们使用的软件原本的样子都是什么嘛&#xff0c;像.exe 运行程序还有 linux 上的可执行文件&#xff0c;其实按照我的理解都是文件&#xff0c;使用想要规范的文本编写&#xff0c;然后经过编译的一个符合不同平台规范的可执行程序&#xff0c;本质就…

​logging --- Python 的日志记录工具​

源代码&#xff1a; Lib/logging/__init__.py Important 此页面仅包含 API 参考信息。教程信息和更多高级用法的讨论&#xff0c;请参阅 基础教程 进阶教程 日志记录操作手册 这个模块为应用与库实现了灵活的事件日志系统的函数与类。 使用标准库提供的 logging API 最主…

FIO jobs参数在Linux IO路径的解读

并发进程&#xff1a; fio工具可以创建多个并行运行的工作负载&#xff08;jobs&#xff09;&#xff0c;每个job代表一个独立的I/O线程。jobs参数决定了同时运行的job数量&#xff0c;这将直接影响到系统的资源分配和管理。 内核调度器&#xff1a; 在Linux内核中&#xff0c…

SpringBoot基础系列:工具类使用

断言 Assert // 要求参数 object 必须为非空&#xff08;Not Null&#xff09;&#xff0c;否则抛出异常&#xff0c;不予放行 // 参数 message 参数用于定制异常信息。 void notNull(Object object, String message) // 要求参数必须空&#xff08;Null&#xff09;&#xff…

c# 十进制整数格式化-(占位符,补齐)

.NET Framework : 4.7.2IDE : Visual Studio Community 2022OS : Windows 10 x64typesetting : Markdownblog : niaoge.blog.csdn.net 代码 using System;class Program { //主函数static void Main(){//整型Console.WriteLine(2.ToString("D3"));Console.WriteL…

装机必备 | 超赞OCR文本识别小工具 Text Scanner

Text Scanner 是一款功能强大的图片扫描工具软件,该软件利用光学字符识别技术&#xff0c;来将图片上的文字内容&#xff0c;直接转换为可编辑文本&#xff0c;实用性很强。 光学字符识别&#xff08;OCR&#xff09;&#xff1a;Text Scanner for Mac采用了先进的OCR技术&…

qt 使用百度在线地图 方法2

使用百度在线地图两个关键点&#xff0c;一是html页面准备&#xff1b;二是qt 与js 语言的交互。 1&#xff0c;html页面的准备&#xff0c;双击页面就可以出现如下效果。 主要代码&#xff1a; <!DOCTYPE html> <html> <head><meta http-equiv"C…