docker资源控制cgroup

一、CPU控制

cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespace隔离起来的资源,

还可以为资源设置权重、计算使用量、操控进程启停等等。所以cgroups (Control groups) 实现了对资源的配额和度量。

cgroups有四大功能:

  1. 资源限制:可以对任务使用的资源总额进行限制;

  2. 优先级分配:通过分配的cpu时间片数量以及磁盘I0带宽大小,实际上相当于控制了任务运行优先级;

  3. 资源统计:可以统计系统的资源使用量,如cpu时长, 内存用量等;

  4. 任务控制: cgroup可以对任务执行挂起、恢复等操作。

1、设置CPU使用率上限

Linux通过CFS ( Completely Fair Scheduler, 完全公平调度器)来调度各个进程对CPU的使用。CFS默认的调度周期是100ms。

可以设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少CPU时间。

使用--cpu-period即可设置调度周期,使用--cpu-quota即可设置在每个周期内容器能使用的CPU时间。两者可以配合使用。

CFS周期的有效范围是1ms~1s, 对应的--cpu-period的数值范围是1000~1000000。

容器的CPU 配额必须不小于1ms,即--cpu-quota 的值必须>= 1000。

查看CPU使用率

docker run -itd --name test centos:7 /bin/bash

cd /sys/fs/cgroup/cpu/docker/98804287283ce0f6abe8a19c9884c6b5149acc5a050a767e                      9f5f4bac5472ef56/

cat cpu.cfs_period_us cpu.cfs_quota_us
100000
-1

#cpu.cfs_period_us:cpu分配的周期(微秒,所以文件名中用 us 表示),默认为100000。

#cpu.cfs_quota_us:表示该control group限制占用的时间(微秒),默认为-1,表示不限制。 如果设为50000,表示占用50000/100000=50%的CPU。

进行CPU压力测试

docker exec -it 98804287283c /bin/bash
vim /cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done
 
chmod +x /cpu.sh
./cpu.sh
exit
 
top  


 

设置CPU使用率

#设置50%的比例分配CPU使用时间上限
docker run -itd --name test2 --cpu-quota 50000 centos:7 /bin/bash   #可以重新创建一个容器并设置限额
或者
cd /sys/fs/cgroup/cpu/docker/98804287283ce0f6abe8a19c9884c6b5149acc5a050a767e9f5f4bac5472ef56
echo 50000 > cpu.cfs_quota_us
docker exec -it 98804287283c /bin/bash
./cpu.sh
exit
 
top                                                #可以看到cpu占用率接近50%,cgroups对cpu的控制起了效果

2、设置CPU资源占用比(设置多个容器时才有效)

Docker 通过--cpu-shares 指定 CPU 份额,默认值为1024,值为1024的倍数。

#创建两个容器为 c1 和 c2,若只有这两个容器,设置容器的权重,使得c1和c2的CPU资源占比为1/3和2/3。

docker run -itd --name test1 --cpu-shares 1024 centos:7
docker run -itd --name test2 --cpu-shares 512 centos:7
 
#分别进入容器,进行压力测试
docker exec -it 2e71bd7f3c4c bash
yum install -y epel-release
yum install stress -y
stress -c 4                 #产生四个进程,每个进程都反复不停的计算随机数的平方根
 
#查看容器的运行状态(动态更新)
docker stats

3、设置容器绑定指定的CPU

#先分配虚拟机4个CPU核数
docker run -itd --name test2 --cpuset-cpus 1,3 centos:7 /bin/bash
 
#进入容器,进行压力测试
yum install -y epel-release
yum install stress -y
stress -c 4
exit
 
#退出容器,执行 top 命令再按 1 查看CPU使用情况。

二、对内存使用进行限制

1、创建指定物理内存的容器

-m(--memory=)选项用于限制容器可以使用的最大内存
docker run -itd --name test4 -m 512m centos:7 /bin/bash
 
docker stats

2、创建指定物理内存和swap的容器

docker run -itd --name gxd7 -m 512m --memory-swap 1g centos:7 /bin/bash
 
强调一下,--memory-swap是必须要与--memory一起使用的
 
正常情况下,--memory-swap的值包含容器可用内存和可用swap
所以-m 300m --memory-swap=1g 的含义为:容器可以使用300M 的物理内存,并且可以使用700M (1G - 300M)的swap
 
如果--memory-swap设置为0或者不设置,则容器可以使用的swap大小为-m值的两倍
如果--memory-swap的值和-m值相同,则容器不能使用swap
如果--memory-Swap值为-1,它表示容器程序使用的内存受限,而可以使用的swap空间使用不受限制(宿主机有多少,swap容器就可以使用多少)

3、 对磁盘IO配额控制(blkio)的限制

3.1 设置限制项

--device-read-bps:限制某个设备上的读速度bps(数据量),单位可以是kb、mb(M)或者gb。
例:docker run -itd --name test1 --device-read-bps /dev/sda:1M  centos:7 /bin/bash
 
--device-write-bps : 限制某个设备上的写速度bps(数据量),单位可以是kb、mb(M)或者gb。
例:docker run -itd --name test1 --device-write-bps /dev/sda:1mb centos:7 /bin/bash
 
--device-read-iops :限制读某个设备的iops(次数)
  
--device-write-iops :限制写入某个设备的iops(次数)

3.2 创建容器,并限制写速度

3.3 通过dd来验证写速度

docker exec -it test1 bash                       #进入容器
dd if=/dev/zero of=test.out bs=1M count=50 oflag=direct #添加oflag参数以规避掉文件系统cache

4、清理docker占用的磁盘空间

docker system prune -a  #可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络

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

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

相关文章

前后端交互三、Ajax加强

零、文章目录 前后端交互三、Ajax加强 1、XMLHttpRequest的基本使用 (1)什么XMLHttpRequest XMLHttpRequest(简称 xhr)是浏览器提供的 Javascript 对象,通过它,可以请求服务器上的数据资源。jQuery 中的…

企业电子招标采购系统源码java 版本 Spring Cloud + Spring Boot

项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及…

JVM原理:JVM垃圾回收算法(通俗易懂)

目录 前言正文垃圾标记算法引用类型强引用软引用弱引用虚引用 引用计数法循环引用问题 根可达性分析法虚拟机栈(栈帧的局部变量表)中的引用方法区中类静态属性引用方法区中常量引用本地方法栈(Native方法)引用 垃圾回收算法标记清…

InstructGPT:Training language models to follow instructions with human feedback

Training language models to follow instructions with human feedback 通过人类反馈的微调,在广泛的任务中使语言模型与用户的意图保持一致 aligning language models with user intent on a wide range of tasks by fine-tuning with human feedback 实验动机 …

AssetStudio工程导入VS各种报错解决

AssetStudio下载地址:https://github.com/Perfare/AssetStudio 工程导入,生成解决方案,然后报了一堆错。让我们来一个一个的解决 这个错误,是缺少System.Runtime.InteropServices.RuntimeInformation.dll文件,下载并添…

20230612 set1打卡

哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

【leetcode】189.轮转数组

方法1: 先把原数组拷贝一份,然后先将原数组的后k个拷贝,再将前numsSize-k个拷贝 void rotate(int* nums, int numsSize, int k) {//可能存在k>numsSize的情况,先处理kk k % numsSize;//拷贝数组int arr[numsSize];int i 0;in…

计算机网络 | socket IPC(本地套接字domain)

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

大模型研究方向0611

文章目录 1. 大模型自身角度认知角度2.大模型的成本角度3. 大模型的评测角度4.大模型的安全角度5. 大模型结构角度 附上刘知远老师的见解:https://hub.baai.ac.cn/view/27283 1. 大模型自身角度认知角度 即大模型的理解,现在,大众普遍认为L…

0202性能分析-索引-MySQL

1 索引语法 创建索引 CREATE [UNIQUE|FULLTEXT] INDEX index_name ON table_name(index_column_name,...);Index_name:规范为idx_表名_字段名... 查看索引 SHOW INDEX FROM table_name;删除索引 DROP INDEX index_name ON table_name;按照下列要求,创建…

V5.0.X版本 EMQX安装、卸载 以及使用

V5.0.X版本 EMQX安装、卸载 以及使用 一、卸载二、下载安装2.1 下载2.2 安装2.2.1 rpm安装2.2.2 tar安装 2.3 测试启动 三、EMQX使用 回到目录    回到末尾 EMQX为大规模分布式物联网 MQTT 消息服务器。提供高效可靠连接海量物联网设备,实时处理分发消息与事件流数…

leangoo领歌敏捷工具中,如何快速查看项目内所有任务卡片

项目管理员能不能快捷的查看整个项目内的所有任务? 能不能快捷查看项目内某一个成员的所有任务? 能不能快捷的在项目内通过一些条件选择查看任务? 可以导出项目内某一个人的所有任务吗?方便做一些统计 等等... 这些现在Leang…

武职301班-day01

实现永和小票页面 效果图 问题分析 把一个大的开发任务,先进行任务分析,把完成这个任务需要的技术点和开发步骤写出来。 开发分析 特点: htmlcss实现 1)小票有宽度限制 2)字体大小不一样,大部分字体大小…

解决获取taro全局配置文件失败,找不到配置文件失败问题

问题:这会导致项目初始化不成功,即要用vuets生成项目的话,依旧是wxml,js的文件,而不是vue文件 解决一:首先找到配置文件目录 删除taro开头的三项文件,再去node_modules下删除tarojs 然后去终…

Python的基础语法知识

1、变量 变量是一个代号,它代表的是一个数据。 在Python中,定义一个变量的操作包含两个步骤: ①为变量起一个名字 ②为变量指定其所代表的数据 这两个步骤在同一行代码中完成。 1.1 变量的命名规则 变量名可以由任意数量的字母、数字、下划…

实验五 标准ACL的配置【网络安全】

实验五 标准ACL的配置【网络安全】 前言推荐实验五 标准ACL的配置问题方案步骤 最后 前言 2023-6-8 18:54:22 以下内容源自《【网络安全】》 仅供学习交流使用 推荐 配置标准ACL 实验五 标准ACL的配置 问题 络调通后,保证网络是通畅的。同时也很可能出现未经…

vscode Delete `␍⏎·····`

在公司电脑首次拉取代码的时候,好多代码报错,在网上查了博客,确定是换行导致,但是参考网上的解决办法,没有解决,不管是设置 auto 还是命令行执行什么什么的,都不管用 下面介绍我的办法 首先&a…

CloudFlare系列--使用第三方来自定义CDN的IP(笨牛简洁版)

原文网址:CloudFlare系列--使用第三方来自定义CDN的IP(笨牛简洁版)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍CloudFlare的CDN如何自定义第三方IP。 概述 CloudFlare官网接入域名的方式只能是 NS 接入,这样默认DNS服务器只能改为CloudFlare的D…

Hibernate框架【五】——基本映射——多对多映射

系列文章目录 Hibernate框架【三】——基本映射——一对一映射 Hibernate框架【四】——基本映射——多对一和一对多映射 基本映射——多对多映射 系列文章目录前言一、多对多映射是什么?二、hibernate多对多关联映射(单向)1.实体结构2.示意…

大麦一键生成订单截图 大麦生成购票链接

一键生成订单截图,生成购票链接 已对接支付 下载程序:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3