Cgroup 资源配置

article/2025/10/14 10:44:20

目录

一、Cgroup定义

二、使用stress压力测试工具测试cpu和内存状态

1、创建一个dockerfile文件

2、创建镜像

3、创建容器

①创建容器

②、创建容器并产生10个子函数进程

三、CPU 周期

1、实现方案

2、实验

四、CPU Core控制

五、docker build 


一、Cgroup定义

cgroup是Linux系统内核提供的一种用来限制、记录、隔离进程组所使用的物理资源的机制,能够实现对进程的分组化管理。

Docker通过cgroup来控制容器使用的资源配额,包括 cPU、内存、磁盘三大方面

二、使用stress压力测试工具测试cpu和内存状态

1、创建一个dockerfile文件

[root@zwb_docker stress_docker]# vim dockerfile 

FROM centos:7
RUN yum install -y wget
RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum -y install stress:

 2、创建镜像

docker build -t centos:stress .

 

3、创建容器

①创建容器

选项:--cpu-shares参数值不能保证可以获得1个vcpu 或者多少GHz的cpu资源,它仅是一个弹性的加权值。

[root@zwb_docker data]# docker run -itd --cpu-shares 100 centos:stress
cde58dbbde820db7533a2f095f03b39d5b89255c6e789bfa23344c22d32b865a

只在容器分配的资源紧缺时,即在需要对容器使用的资源进行限制时,才会生效。因此,无法单纯根据某个容器的cpu份额来确定有多少cpu资源分配给他。

②、创建容器并产生10个子函数进程

容器一:创建容器名为cpu512,设置cpu的权重为512

[root@zwb_docker data]# docker run -itd --name cpu512 --cpu-shares 512 centos:stress stress -c 10

--cpu-shares 512:表示设置权重为512

容器一:创建容器名为cpu1024,设置cpu的权重为1024

[root@zwb_docker data]# docker run -itd --name cpu1024 --cpu-shares 1024 centos:stress stress -c 10
b850fe8bbb77b37320f0233660c20e81128802d26ff239d72d8d64a83030bdab

--cpu-shares 1024:表示设置权重为1024

将两天容器放一起进行对比

docker stats

容器ID为b850fe8bbb77,名为cpu1024,为cpu权重为1024

容器ID为9758ca391cb0,名为cpu512,为cpu权重为512

结果:CPU1024 比cpu512多出一半的机会拿到CPU的资源(权重值分配的是获取CPU资源的机会,而不是指cpu的资源)

三、CPU 周期

1、实现方案

Docker提供了--cpu-period、--cpu-quota两个参数控制容器可以分配到的CPU时钟周期。--cpu-period是用来指定容器对CPU的使用要在多长时间内做一次重新分配。

2、实验

例如:容器进程需要每1秒使用单个CPU的0.2秒时间,可以将cpu-period 设置为100000(即1秒),cpu-quota设置为20000 ( 0.2秒)

先查看默认配置,文件位置

[root@zwb_docker 9758ca391cb02d198b42da4a21c44d8d66ee1658e5a4a9561faf251ec317d32a]# pwd
/sys/fs/cgroup/cpu/docker/9758ca391cb02d198b42da4a21c44d8d66ee1658e5a4a9561faf251ec317d32a

[root@zwb_docker 9758ca391cb02d198b42da4a21c44d8d66ee1658e5a4a9561faf251ec317d32a]# cat cpu.cfs_quota_us
-1                 ### 数值为1,表示没有进行设置

创建容器并进行设置:

[root@zwb_docker ~]# docker run -itd --cpu-period 100000 --cpu-quota 20000 centos:stress 
765c8c86912f752395d35d8a640432f6c9d69f32b702821bdec5b1464f26d968
[root@zwb_docker ~]# cd /sys/fs/cgroup/cpu/docker/765c8c86912f752395d35d8a640432f6c9d69f32b702821bdec5b1464f26d968/
[root@zwb_docker 765c8c86912f752395d35d8a640432f6c9d69f32b702821bdec5b1464f26d968]# ls
cgroup.clone_children  cgroup.procs  cpuacct.usage         cpu.cfs_period_us  cpu.rt_period_us   cpu.shares  notify_on_release
cgroup.event_control   cpuacct.stat  cpuacct.usage_percpu  cpu.cfs_quota_us   cpu.rt_runtime_us  cpu.stat    tasks
[root@zwb_docker 765c8c86912f752395d35d8a640432f6c9d69f32b702821bdec5b1464f26d968]# cat cpu.cfs_quota_us
20000
 

四、 CPU Core控制

对多核CPU的服务器,Docker还可以控制容器运行使用哪些CPU内核,即使用--cpuset-cpus参数。这对具有多CPU的服务器尤其有用,可以对需要高性能计算的容器进行性能最优的配置。

[root@zwb_docker ~]# docker run -itd --name cpu1 --cpuset-cpus 0-1 centos:stress 

## 表示容器运行起来的时候只能使用0和1这两个cpu进行处理

[root@zwb_docker ~]# docker run -itd --name cpu1 --cpuset-cpus 0-1 centos:stress 
524ca820088440a12d0bd2d7844fa2bb5c348282d7cb055b4d24761851c9bd21

五、docker build 

为了使用方便,我们也可以在构建镜像的时候把资源限制填写进去

语法格式:

 docker build [选项]

选项:

  • --build-arg=[] :设置镜像创建时的变量;

  • --cpu-shares :设置 cpu 使用权重;

  • --cpu-period :限制 CPU CFS周期;

  • --cpu-quota :限制 CPU CFS配额;

  • --cpuset-cpus :指定使用的CPU id;

  • --cpuset-mems :指定使用的内存 id;

  • --disable-content-trust :忽略校验,默认开启;

  • -f :指定要使用的Dockerfile路径;

  • --force-rm :设置镜像过程中删除中间容器;

  • --isolation :使用容器隔离技术;

  • --label=[] :设置镜像使用的元数据;

  • -m :设置内存最大值;

  • --memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;

  • --no-cache :创建镜像的过程不使用缓存;

  • --pull :尝试去更新镜像的新版本;

  • --quiet, -q :安静模式,成功后只输出镜像 ID;

  • --rm :设置镜像成功后删除中间容器;

  • --shm-size :设置/dev/shm的大小,默认值是64M;

  • --ulimit :Ulimit配置。

  • --squash :将 Dockerfile 中所有的操作压缩为一层。

  • --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

  • --network: 默认 default。在构建期间设置RUN指令的网络模式


http://chatgpt.dhexx.cn/article/NYITkdZF.shtml

相关文章

cgroup资源配置

一、cgroup介绍二、利用stress 压力测试工具来测试三、CPU控制1、仅用率控制(权重)2、周期限制方法一:在命令行里直接设置方法二:创建容器后,关闭容器在文件里直接修改方法三:进入容器查看 3、cpu核心数4、…

【CGroup原理篇】3. CGroup使用指南

写在前面 这里先从整体上概述cgroup的创建,挂载,参数配置和卸载,后面的章节中会一一介绍每个子系统的详细使用方法和使用案例。 一、使用Linux命令管理CGroup 1.1挂载cgroup临时文件系统 mount -t tmpfs cgroup_root /sys/fs/cgroup 1.2 创建挂载层级需要的目录 mkdir /sy…

Linux CGroup 原理

Linux CGroup 原理 1、CGroup简介 cgroups是Linux下控制一个(或一组)进程的资源限制机制,全称是control groups,可以对cpu、内存等资源做精细化控制。 开发者可以直接基于cgroups来进行进程资源控制,比如8核的机器上…

LINUX CGROUP总结

简介: Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。这个项目最早是由Google的工程师在2006年发起(主要是Paul Men…

cgroup 简介

cgroup 的功能在于将一台计算机上的资源(CPU,memory,network)进行分片,来防止进程间不利的资源抢占。 术语 cgroup:关联一组 task 和一组 subsystem 的配置参数。 一个 task 对应一个进程,cg…

cgroup基础介绍

一项新概念的产生,必然有其原因,cgroup也不例外,最初由谷歌工程师Paul Menage和Rohit Seth提出【1】:因为计算机硬件能力越来越强大,为了提高机器的使用效率,可以在同一台机器上运行不同运算模型的工作。开…

深入浅出cgroup

一、什么是cgroup Cgroup是linux内核用来控制系统资源的机制,它将操作系统中的所有进程以组为单位划分,给这一组进程定义对某一类资源特定的访问权限。Cgroup用子系统(subsystem)来描述所能控制的系统资源,子系统具有多…

Cgroup概述

一、Cgroup的目的 Cgroup和namespa类似,也是将进程进程分组,但是目的与namespace不一样,namespace是为了隔离进程组之前的资源,而Cgroup是为了对一组进程进行统一的资源监控和限制。 二、为什么需要Cgroup 在Linux里&#xf…

Cgroup是什么(相关概念、功能、作用、特点、怎么用)

文章目录 Cgroup 什么是CgroupCgroup的相关概念相互关系Cgroup的功能Cgroup的作用Cgroup的层级图及特点Cgroup怎么用 什么是Cgroup cgroups,其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限…

Cgroup简介-概述

Cgroup(Control Groups)是这样一种机制:它以分组的形式对进程使用系统资源的行为进行管理和控制。也就是说,用户通过cgroup对所有进程进行分组,再对该分组整体进行资源的分配和控制。 1 Cgroup的结构 cgroup中的每个分…

J2EE技术架构

一、简介 J2EE(Java 2 Platform, Enterprise Edition)是一个为大企业主机级的计算类型而设计的Java平台。Sun微系统(与其工业伙伴一起,例如IBM)设计了J2EE,以此来简化在受客户级环境下的应用开发。由于创造…

J2EE架构模型

从开始学Java Web到现在,使用的J2EE架构一步一步的在改变,从最简单的到越来越复杂,刚开始都是完全就照着每个架构的形式去开发项目,很少自己会想为什么用这样的架构好?好在哪里?现在学了这么久,…

java开发系统架构_Java开发:ECP系统J2EE架构开发平台

一 体系结构 ECP平台是一个基于J2EE架构设计的大型分布式企业协同管理平台,通过采用成熟的J2EE的多层企业架构体系,充分保证了系统的健壮性、开放性和扩展性。可选择部署于多种系统环境,满足不同类型、不同规模企业的需要。企业可以根据自己的…

J2EE的体系架构

转载自:http://zengbo0710.iteye.com/blog/79490 J2EE 即Java2平台企业版,它提供了基于组件的方式来设计、开发、组装和部署企业应用。J2EE使用多层分布式的应用模型,这个多层通常通过三层或四层来实现: 1、客户层&…

J2EE体系架构

J2EE是Java2平台企业版(Java 2 Platform,Enterprise Edition),它的核心是一组技术规范与指南,提供基于组件的方式来设计、开发、组装和部署企业应用。J2EE使用多层分布式的应用模型。 J2EE分层 客户层,执行在客户计算…

基于J2EE架构的在线考试系统-Java(报告+源码+PPT

目前国内基于B/S、C/S结构的在线考试系统产品已经有许多,本文首先介绍了这些考试系统的形成和发展过程,大致结构。然后通过仔细分析,提出了目前的这些系统还存有系统更新和维护等种种弊端,仍不够成熟。基于对现有产品的思考,结合J…

Spring 架构图

http://it.100xuexi.com/view/otdetail/20130426/38b9d40a-138b-4b24-963c-ac029b034fe7.html 1.Spring 架构图 Spring 是一个开源 框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件…

Scala安装教程

1.Scala官网滑到最下面如图: 选择Allversions 2.我们将下载2.12.16版本,如图下 3.选scala-2.12.16.zip安装 4.先将scala-2.12.16zip解压为文件夹我解压到了D盘的scalal文件夹下面 D:\scalal\scala-2.12.16